2009-03-26 39 views
140

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

class Test { 
    Map<Integer,String> entities; 

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

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

उत्तर

165

आप सूचकांक शब्दकोश, आप की जरूरत नहीं किया जा सकता है नहीं है 'के लिए' ।

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

परीक्षण करने के लिए/मूल्यों को प्राप्त एक कारगर तरीका TryGetValue (Earwicker लिए thanx) है:

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

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

संसाधन:

Dictionary-Keys

Try Get Value

+14

शायद TryGetValue का उल्लेख करना चाहें। –

+0

क्या यह ओ (एलजी (एन)) 'जावा की तरह है? मुझे नहीं लगता कि –

+1

@ डिस्कोटर रीड ओ (1) हैं, शब्दकोश के टिप्पणियां अनुभाग देखें <टीके, टीवीएएलयू> एमएसडीएन पेज – canton7

17

शब्दकोश <,> बराबर है।

class Test { 
    Dictionary<int,String> entities; 

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

आप एक कस्टम कुंजी प्रकार उपयोग करना चाहते हैं: एक ओर जहां यह एक प्राप्त नहीं है (...) विधि है, यह एक अनुक्रमित संपत्ति बुलाया आइटम जो आप सी # में का उपयोग सीधे सूचकांक अंकन का उपयोग कर सकते हैं है तो आपको IEquatable <> को लागू करने पर विचार करना चाहिए और बराबर (ऑब्जेक्ट) और 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' के नतीजे पर ध्यान दिए बिना मूल्य वापस कर सकते हैं, चूंकि कुंजी मौजूद नहीं है, इसलिए 'वैल' को 'शून्य' (यानी 'डिफ़ॉल्ट (स्ट्रिंग) 'असाइन किया जाएगा। – dlev

संबंधित मुद्दे