को देखते हुए दोIEnumerable
रों एक ही आकार के, मैं इसे कैसे एकDictionary
LINQ का उपयोग करने के लिए परिवर्तित कर सकते हैं?मानचित्र दो सूचियों
IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };
var dictionary = /* Linq ? */;
और उम्मीद उत्पादन होता है:
A: Val A
B: Val B
C: Val C
मुझे आश्चर्य है कि अगर वहाँ इसे प्राप्त करने के कुछ आसान तरीका है।
और मुझे प्रदर्शन के बारे में चिंतित होना चाहिए? अगर मेरे पास बड़े संग्रह हैं तो क्या होगा?
मुझे नहीं पता कि क्या यह करने के लिए एक आसान तरीका है, वर्तमान में मैं इस तरह कर रहा हूँ:
मैं एक एक्सटेंशन विधि है कि होगा पाश IEnumerable
मुझे तत्व और सूचकांक उपलब्ध कराने नंबर।
public static class Ext
{
public static void Each<T>(this IEnumerable els, Action<T, int> a)
{
int i = 0;
foreach (T e in els)
{
a(e, i++);
}
}
}
और मैं एक विधि है कि Enumerables की और सूचकांक के साथ पाश एक अन्य Enumerable पर बराबर तत्व को पुनः प्राप्त होगा।
public static Dictionary<TKey, TValue> Merge<TKey, TValue>(IEnumerable<TKey> keys, IEnumerable<TValue> values)
{
var dic = new Dictionary<TKey, TValue>();
keys.Each<TKey>((x, i) =>
{
dic.Add(x, values.ElementAt(i));
});
return dic;
}
तब मुझे यह पसंद का उपयोग करें:
IEnumerable<string> keys = new List<string>() { "A", "B", "C" };
IEnumerable<string> values = new List<string>() { "Val A", "Val B", "Val C" };
var dic = Util.Merge(keys, values);
और उत्पादन सही है:
A: Val A
B: Val B
C: Val C
। ज़िप के लिए अंगूठे। खुशी है कि यह इसे बीसीएल में बना दिया गया है। मेरे पास कुछ समय के लिए मेरा अपना संस्करण है। – spender
@ स्पेंडर - यहां तक कि यदि आपने अपना खुद का बना लिया है, तो भी मैं इसे [एरिक लिपर्ट्स ब्लॉग] से ले जाऊंगा (http://blogs.msdn.com/b/ericlippert/archive/2009/05/07/zip-me-up। एएसपीएक्स) – Oliver
दयालुता 'ज़िप' विधि की आवश्यकता है। यदि केवल अधिक स्थैतिक रूप से टाइप की गई भाषाएं सामान्य वैरैडिक पैरामीटर का समर्थन करती हैं, तो 'चयन करें' इसे संभालेगा (जैसे योजना में 'मानचित्र')। – leppie