2010-04-30 11 views
47

ठीक है ... यहाँ एक सॉफ्टबॉल सवाल है ...कोई आइटम किसी कुंजी/मान जोड़ी ऑब्जेक्ट में कैसे सम्मिलित करें?

मुझे किसी विशिष्ट स्थिति पर किसी ऑब्जेक्ट में एक कुंजी/मान जोड़ी डालने में सक्षम होना चाहिए। मैं वर्तमान में एक हैशटेबल के साथ काम कर रहा हूं, जो निश्चित रूप से, इस कार्यक्षमता की अनुमति नहीं देता है। सबसे अच्छा तरीका क्या होगा?

अद्यतन: इसके अलावा, मुझे कुंजी द्वारा देखने की क्षमता की आवश्यकता है।

उदाहरण ... oversimplified और pseudocoded लेकिन पहले से बिंदु वर्णन करना चाहिए

// existing Hashtable 
myHashtable.Add("somekey1", "somevalue1"); 
myHashtable.Add("somekey2", "somevalue2"); 
myHashtable.Add("somekey3", "somevalue3"); 

// Some other object that will allow me to insert a new key/value pair. 
// Assume that this object has been populated with the above key/value pairs. 
oSomeObject.Insert("newfirstkey","newfirstvalue"); 

धन्यवाद के लिए

उत्तर

83
List<KeyValuePair<string, string>> kvpList = new List<KeyValuePair<string, string>>() 
{ 
    new KeyValuePair<string, string>("Key1", "Value1"), 
    new KeyValuePair<string, string>("Key2", "Value2"), 
    new KeyValuePair<string, string>("Key3", "Value3"), 
}; 

kvpList.Insert(0, new KeyValuePair<string, string>("New Key 1", "New Value 1")); 

इस कोड का प्रयोग

Key: New Key 1 Value: New Value 1 
Key: Key 1 Value: Value 1 
Key: Key 2 Value: Value 2 
Key: Key 3 Value: Value 3 

ही एक KeyValuePair या जो कुछ भी अन्य प्रकार का उपयोग करना चाहते के साथ काम करेंगे ..

संपादित करें -

कुंजी के द्वारा देखने के लिए, आप निम्न कर सकते हैं:

var result = stringList.Where(s => s == "Lookup"); 

आप एक KeyValuePair साथ ऐसा कर सकता है निम्न करके:

var result = kvpList.Where (kvp => kvp.Value == "Lookup"); 

अंतिम संपादन -

स्ट्रिंग के बजाए KeyValuePair के लिए विशिष्ट उत्तर बनाया।

+0

क्षमाप्रार्थी, मैंने अभी यह स्पष्ट करने के लिए अद्यतन किया है कि मुझे कुंजी द्वारा देखने की क्षमता की आवश्यकता है। – Clay

+0

इसे संपादित करने के लिए मेरे संपादन को देखें। –

+1

उत्कृष्ट, धन्यवाद! – Clay

1

hashtables स्वाभाविक पृथक नहीं किया जा, आपका सर्वश्रेष्ठ दांव इस तरह के एक SortedList या एक ArrayList

+0

हैशटेबल पूर्व-मौजूदा कोड है जिसे मैं वास्तव में इस समय नहीं बदलना पसंद करूंगा। – Clay

0

मैं का प्रयोग करेंगे Dictionary<TKey, TValue> (इतने लंबे समय के प्रत्येक कुंजी अद्वितीय है के रूप में) के रूप में एक और संरचना का प्रयोग है।

संपादित करें: क्षमा करें, एहसास हुआ कि आप इसे किसी विशिष्ट स्थिति में जोड़ना चाहते हैं। मेरी गलती। आप SortedDictionary का उपयोग कर सकते हैं लेकिन यह आपको अभी भी डालने नहीं देगा।

+0

लेकिन शब्दकोश में 'Insert() 'की कमी है .... –

3

क्या आपको कुंजी से ऑब्जेक्ट्स देखने की ज़रूरत है? यदि नहीं, तो अगर आप नेट उपयोग नहीं कर रहे 4.

+0

हां, मुझे कुंजी से देखने की आवश्यकता है। – Clay

2

आप एक OrderedDictionary इस्तेमाल कर सकते हैं List<Tuple<string, string>> या List<KeyValuePair<string, string>> उपयोग करने पर विचार, लेकिन मैं सवाल क्यों आप ऐसा करना चाहते हैं जाएगा।

foreach (KeyValuePair<string, string> kvp in kvpList) 
{ 
    Console.WriteLine(string.Format("Key: {0} Value: {1}", kvp.Key, kvp.Value); 
} 

उम्मीद उत्पादन किया जाना चाहिए::

2

एक लिंक्ड सूची का उपयोग करें। यह इस सटीक स्थिति के लिए बनाया गया था।
यदि आपको अभी भी ओ (1) लुकअप शब्दकोश की आवश्यकता है, तो एक शब्दकोश और एक लिंक की गई सूची का उपयोग करें।

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