जावा मैप C # के बराबर


150

मैं अपनी पसंद की कुंजी के साथ संग्रह में वस्तुओं की एक सूची रखने की कोशिश कर रहा हूं। जावा में, मैं केवल मैप का उपयोग निम्नानुसार करूंगा:

class Test {
  Map<Integer,String> entities;

  public String getEntity(Integer code) {
    return this.entities.get(code);
  }
}

क्या C # में ऐसा करने का एक समान तरीका है? System.Collections.Generic.Hashsetहैश का उपयोग नहीं करता है और मैं एक कस्टम प्रकार कुंजी System.Collections.Hashtableको परिभाषित नहीं कर सकता एक सामान्य वर्ग
System.Collections.Generic.Dictionaryएक get(Key)विधि नहीं है

जवाबों:


181

आप डिक्शनरी को इंडेक्स कर सकते हैं, आपको 'गेट' की जरूरत नहीं थी।

Dictionary<string,string> example = new Dictionary<string,string>();
...
example.Add("hello","world");
...
Console.Writeline(example["hello"]);

मूल्यों को परखने / प्राप्त करने का एक कुशल तरीका है TryGetValue(इयरविकर की तुलना में):

if (otherExample.TryGetValue("key", out value))
{
    otherExample["key"] = value + 1;
}

इस विधि से आप तेजी से और अपवाद-कम मान प्राप्त कर सकते हैं (यदि वर्तमान में)।

संसाधन:

शब्दकोश-कुंजी

मूल्य पाने का प्रयास करें


14
TryGetValue के रूप में अच्छी तरह से उल्लेख करना चाहते हो सकता है।
डैनियल ईयरविकर

क्या यह O(lg(n))जावा की तरह है? मुझे नहीं लगता

1
@Desolator पुस्तकें O (1) हैं, शब्दकोश के रिमार्क्स अनुभाग देखें <
TKey, TValue

17

शब्दकोश <,> समकक्ष है। हालांकि इसके पास गेट (...) विधि नहीं है, इसमें आइटम नाम की एक अनुक्रमित संपत्ति होती है जिसे आप C # में देख सकते हैं सीधे नोटिंग का उपयोग करते हुए:

class Test {
  Dictionary<int,String> entities;

  public String getEntity(int code) {
    return this.entities[code];
  }
}

यदि आप एक कस्टम कुंजी प्रकार का उपयोग करना चाहते हैं तो आपको IEquitable <> को लागू करने और समान (ऑब्जेक्ट) और GetHashCode () को ओवरराइड करने पर विचार करना चाहिए जब तक कि डिफ़ॉल्ट (संदर्भ या संरचना) समानता कुंजी की समानता का निर्धारण करने के लिए पर्याप्त न हो। यदि आप एक शब्दकोष में डाले जाने के बाद एक कुंजी को उत्परिवर्तित करते हैं, तो आपको अपने महत्वपूर्ण प्रकार को अजीब चीजों को रोकने के लिए अपरिवर्तनीय बनाना चाहिए (जैसे कि उत्परिवर्तन के कारण इसका हैश कोड बदल जाता है)।


10
class Test
{
    Dictionary<int, string> entities;

    public string GetEntity(int code)
    {
        // java's get method returns null when the key has no mapping
        // so we'll do the same

        string val;
        if (entities.TryGetValue(code, out val))
            return val;
        else
            return null;
    }
}

5
यह उत्तर हास्यास्पद रूप से पुराना है, लेकिन यदि आप कुंजी मौजूद नहीं हैं TryGetValue, तो आपको इसके परिणाम की परवाह किए बिना मूल्य वापस कर सकते हैं , क्योंकि valसौंपा जाएगा null(यानी default(string))।
dlev
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.