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.