LINQ

2010-03-12 10 views
14

का उपयोग कर 2 सूचियों का उपयोग करके एक शब्दकोश बनाएं, मैं 2 सूचियों में से एक शब्दकोश बनाने की कोशिश कर रहा हूं जहां एक सूची में कुंजी होती है और एक सूची में मान होते हैं। मैं इसे लूप के लिए उपयोग कर सकता हूं लेकिन मैं LINQ का उपयोग करके ऐसा करने का कोई तरीका ढूंढने की कोशिश कर रहा हूं। नमूना कोड सहायक होगा। धन्यवाद!!!!LINQ

उत्तर

38

.NET4 में आप में निर्मित Zip विधि दो दृश्यों, एक ToDictionary कॉल के बाद विलय करने के लिए इस्तेमाल कर सकते हैं:

var keys = new List<int> { 1, 2, 3 }; 
var values = new List<string> { "one", "two", "three" }; 

var dictionary = keys.Zip(values, (k, v) => new { Key = k, Value = v }) 
        .ToDictionary(x => x.Key, x => x.Value); 
20
 List<string> keys = new List<string>(); 
     List<string> values = new List<string>(); 
     Dictionary<string, string> dict = keys.ToDictionary(x => x, x => values[keys.IndexOf(x)]); 

यह निश्चित रूप से मानता है कि प्रत्येक सूची की लंबाई समान है और कुंजी अद्वितीय हैं।

अद्यतन:This answer गैर-तुच्छ आकार के सूचियों के लिए कहीं अधिक कुशल और उपयोग किया जाना चाहिए।

+0

मैं नहीं बल्कि इसके स्थान पर इस का उपयोग कर के, एक पाश का उपयोग करेंगे। उत्तर के लिए अभी भी +1। – Steven

+0

वह था। धन्यवाद!!! – VNarasimhaM

+0

आप LINQ के बजाय लूप का उपयोग क्यों करेंगे? मैंने सोचा कि यह कोड लूप के मुकाबले बहुत अधिक सटीक और पठनीय है। – VNarasimhaM

4

आप एक Select अभिव्यक्ति में सूचकांक शामिल कर सकते हैं इस कुशल बनाने के लिए:

 var a = new List<string>() { "A", "B", "C" }; 
     var b = new List<string>() { "1", "2", "3" }; 

     var c = a.Select((x, i) => new {key = x, value = b[i]}).ToDictionary(e => e.key, e => e.value); 

     foreach (var d in c) 
      Console.WriteLine(d.Key + " = " + d.Value); 

     Console.ReadKey(); 
-3

आप इस कोड का उपयोग और पूरी तरह से काम कर सकते हैं।

सी # कोड:

var keys = new List<string> { "Kalu", "Kishan", "Gourav" }; 
     var values = new List<string> { "Singh", "Paneri", "Jain" }; 

     Dictionary<string, string> dictionary = new Dictionary<string, string>(); 
     for (int i = 0; i < keys.Count; i++) 
     { 

      dictionary.Add(keys[i].ToString(), values[i].ToString()); 
     } 
     foreach (var data in dictionary) 
     { 
      Console.WriteLine("{0} {1}", data.Key, data.Value); 

     } 
     Console.ReadLine(); 

आउटपुट स्क्रीन:

enter image description here

+0

बहुत बोझिल एक कार्य – netfed

1
var dic = keys.Zip(values, (k, v) => new { k, v }) 
      .ToDictionary(x => x.k, x => x.v); 
+2

क्या यह वास्तव में [ल्यूकएचएच] (http://stackoverflow.com/users/55847/lukeh) के [5 वर्षीय उत्तर] के लिए कुछ भी जोड़ता है (http://stackoverflow.com/a/ 2434647/215380)? – Rawling

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