IEnumerable <KeyValuePair <>> से एक शब्दकोश को फिर से बनाना


173

मेरे पास एक विधि है जो एक रिटर्न देती है IEnumerable<KeyValuePair<string, ArrayList>>, लेकिन कुछ कॉलर्स को शब्दकोश होने की विधि के परिणाम की आवश्यकता होती है। मैं कैसे IEnumerable<KeyValuePair<string, ArrayList>>एक में परिवर्तित Dictionary<string, ArrayList>कर सकते हैं कि मैं उपयोग कर सकते हैं TryGetValue?

तरीका:

public IEnumerable<KeyValuePair<string, ArrayList>> GetComponents()
{
  // ...
  yield return new KeyValuePair<string, ArrayList>(t.Name, controlInformation);
}

फोन करने वाले:

Dictionary<string, ArrayList> actual = target.GetComponents();
actual.ContainsKey("something");

संभव डुप्लिकेट? stackoverflow.com/questions/7850334/…
कूलकाऊ

जवाबों:


329

यदि आप .NET 3.5 या .NET 4 का उपयोग कर रहे हैं, तो LINQ का उपयोग करके शब्दकोश बनाना आसान है:

Dictionary<string, ArrayList> result = target.GetComponents()
                                      .ToDictionary(x => x.Key, x => x.Value);

ऐसी कोई बात नहीं है, IEnumerable<T1, T2>लेकिन KeyValuePair<TKey, TValue>यह ठीक है।


15
आपको लगता है कि एक ऐसा कॉल होगा जिसमें तर्कों की आवश्यकता नहीं है, यह देखते हुए कि शब्दकोश <TKey, TValue> implements IEnumerable <KeyValuePair <TKey, TValue >>, लेकिन ओह अच्छी तरह से। अपने खुद के बनाने के लिए काफी आसान है।
केसी

6
@DanVerdolino मुझे पता है कि। आपको लगता है कि क्योंकि यह सबसे आम चीजों में से एक है जो आप KVP के IEnumerable के साथ करना चाहते हैं।
केसी

17
2016 अब, और मुझे अभी भी यह गूगल करना था। आपको लगता है कि वहाँ एक के लिए एक निर्माता होगा Dictionaryकि एक IEnumerable<KeyValuePair<TKey, TValue>>बस की तरह List<T>लेता है एक लेता है IEnumerable<T>। इसके अलावा कोई AddRangeभी या यहां तक Addकि कुंजी / मूल्य जोड़े लेता है। उसके साथ क्या है?
डाई मौस

5
यह अब 2017 है, और हम इसे विस्तार विधि के रूप में जोड़ सकते हैं!
क्रिस बुश

2
बहुत सारे "मुझे विश्वास नहीं हो सकता है। नेट कोर में <स्पष्ट सुविधा नहीं है" मोरेलिन के माध्यम से हल किया गया है । एक पैरामीटर सहित IEnumerable <KeyValuePair> ->ToDictionary()
aaaaaa

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.