जवाबों:
Dictionary
शायद निकटतम है। इंटरफ़ेस को System.Collections.Generic.Dictionary
लागू करता System.Collections.Generic.IDictionary
है (जो जावा के Map
इंटरफ़ेस के समान है )।
कुछ उल्लेखनीय अंतर जिनसे आपको अवगत होना चाहिए:
put
और get
तरीके हैं
myMap.put(key, value)
MyObject value = myMap.get(key)
[]
सेटिंग / आइटम प्राप्त करने के लिए अनुक्रमण
का उपयोग करता हैmyDictionary[key] = value
MyObject value = myDictionary[key]
null
चांबियाँ
HashMap
अशक्त कुंजियाँ अनुमति देता हैDictionary
फेंकता हैArgumentNullException
HashMap
मौजूदा मूल्य को नए के साथ बदल देगा।Dictionary
यदि आप []
अनुक्रमणिका का उपयोग करते हैं तो .NET का मौजूदा मान नए के साथ बदल जाएगा । यदि आप Add
विधि का उपयोग करते हैं , तो यह बदले में ए फेंक देगा ArgumentException
।HashMap
अशक्त वापसी होगी।Dictionary
फेंक देंगे KeyNotFoundException
। इससे बचने TryGetValue
के लिए आप []
अनुक्रमणिका के बजाय विधि का उपयोग कर सकते हैं :MyObject value = null;
if (!myDictionary.TryGetValue(key, out value)) { /* key doesn't exist */ }
Dictionary
की एक ContainsKey
विधि है जो पिछली दो समस्याओं से निपटने में मदद कर सकती है।
Dictionary
डुप्लिकेट कुंजी जोड़ते समय अपवाद फेंकता है।
if (!myDictionary.TryGetValue(key, value))
out
दूसरे तर्क के लिए की जरूरत है। तोif (!myDictionary.TryGetValue(key, out value))
मुझे एक ऐसी डिक्शनरी की जरूरत थी, जिसने "अशक्त" कुंजी स्वीकार कर ली हो, लेकिन ऐसा लगता है कि कोई देशी नहीं है, इसलिए मैंने अपना लिखा है। यह वास्तव में बहुत सरल है। मुझे शब्दकोश से विरासत में मिला, "शून्य" कुंजी के लिए मान रखने के लिए एक निजी फ़ील्ड जोड़ा, फिर इंडेक्सर को ओवरराइट किया। यह इस प्रकार चलता है :
public class NullableDictionnary : Dictionary<string, string>
{
string null_value;
public StringDictionary this[string key]
{
get
{
if (key == null)
{
return null_value;
}
return base[key];
}
set
{
if (key == null)
{
null_value = value;
}
else
{
base[key] = value;
}
}
}
}
आशा है कि यह भविष्य में किसी की मदद करेगा।
==========
मैंने इसे इस प्रारूप में संशोधित किया
public class NullableDictionnary : Dictionary<string, object>
मुझे "कोडडक्ट के एल्गोरिथ्म" के एक उदाहरण के साथ इसे समझने में मदद करने दें
समांतर ब्रह्मांड में ' डिक्शनरी इन सी #' जावा में ' हैशमैप ' है।
कुछ कार्यान्वयन अलग हैं। बेहतर समझने के लिए नीचे दिया गया उदाहरण देखें।
जावा हैशपार्क की घोषणा:
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
घोषणा # C:
Dictionary<int, int> Pairs = new Dictionary<int, int>();
किसी स्थान से मूल्य प्राप्त करना:
pairs.get(input[i]); // in Java
Pairs[input[i]]; // in C#
स्थान पर मान सेट करना:
pairs.put(k - input[i], input[i]); // in Java
Pairs[k - input[i]] = input[i]; // in C#
एक समग्र उदाहरण कोडडक्ट के एल्गोरिथ्म के नीचे से देखा जा सकता है।
जावा में कोडडक्ट का एल्गोरिथ्म:
import java.util.HashMap;
public class ArrayPairSum {
public static void printSumPairs(int[] input, int k)
{
Map<Integer, Integer> pairs = new HashMap<Integer, Integer>();
for (int i = 0; i < input.length; i++)
{
if (pairs.containsKey(input[i]))
System.out.println(input[i] + ", " + pairs.get(input[i]));
else
pairs.put(k - input[i], input[i]);
}
}
public static void main(String[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
printSumPairs(a, 10);
}
}
सी # में कोडडक्ट का एल्गोरिथ्म
using System;
using System.Collections.Generic;
class Program
{
static void checkPairs(int[] input, int k)
{
Dictionary<int, int> Pairs = new Dictionary<int, int>();
for (int i = 0; i < input.Length; i++)
{
if (Pairs.ContainsKey(input[i]))
{
Console.WriteLine(input[i] + ", " + Pairs[input[i]]);
}
else
{
Pairs[k - input[i]] = input[i];
}
}
}
static void Main(string[] args)
{
int[] a = { 2, 45, 7, 3, 5, 1, 8, 9 };
//method : codaddict's algorithm : O(n)
checkPairs(a, 10);
Console.Read();
}
}
हैशटेबल वर्ग के लिए MSDN पर दस्तावेज़ देखें ।
कुंजी-और-मूल्य जोड़े के संग्रह का प्रतिनिधित्व करता है जो कुंजी के हैश कोड के आधार पर व्यवस्थित होते हैं।
इसके अलावा, ध्यान रखें कि यह थ्रेड-सुरक्षित नहीं है।
Dictionary<TKey, TValue>
संकलन समय प्रकार की जाँच के कारण बेहतर है, और क्योंकि इसमें मूल्य प्रकारों की मुक्केबाजी की आवश्यकता नहीं है।
शब्दकोश का प्रयोग करें - यह हैशटेबल का उपयोग करता है, लेकिन प्रकार है।
इसके अलावा, अपने जावा कोड के लिए
int a = map.get(key);
//continue with your logic
सी # में सबसे अच्छा कोडित किया जाएगा:
int a;
if(dict.TryGetValue(key, out a)){
//continue with your logic
}
इस तरह, आप किसी ब्लॉक के अंदर "a" वेरिएबल की आवश्यकता को स्कोप कर सकते हैं और यदि आपको बाद में इसकी आवश्यकता है तो यह ब्लॉक के बाहर भी पहुंच योग्य है।
उत्तर है
शब्दकोश
मेरे कार्य को देखें, इसका सरल ऐड शब्दकोश के सबसे महत्वपूर्ण सदस्य कार्यों का उपयोग करता है
यह डुप्लिकेट गलत है यदि सूची में डुप्लिकेट आइटम हैं
public static bool HasDuplicates<T>(IList<T> items)
{
Dictionary<T, bool> mp = new Dictionary<T, bool>();
for (int i = 0; i < items.Count; i++)
{
if (mp.ContainsKey(items[i]))
{
return true; // has duplicates
}
mp.Add(items[i], true);
}
return false; // no duplicates
}
मैं सिर्फ अपने दो सेंट देना चाहता था।
यह @Powerlord के उत्तर के अनुसार है।
अशक्त तारों के बजाय "अशक्त" डालता है ।
private static Dictionary<string, string> map = new Dictionary<string, string>();
public static void put(string key, string value)
{
if (value == null) value = "null";
map[key] = value;
}
public static string get(string key, string defaultValue)
{
try
{
return map[key];
}
catch (KeyNotFoundException e)
{
return defaultValue;
}
}
public static string get(string key)
{
return get(key, "null");
}