2015-02-09 39 views
2

我有鑰匙,並從中我想創建一個字典值的數組:如何將具有值數組的鍵的數組連接到沒有循環的字典?

var keys = new string[] { "Key1", "Key2" }; 
var values = new string[] { "Bob", "Tim" }; 

當務之急的方法是這樣的:

var dictionary = new Dictionary<string, string>(); 
for(int i = 0; i < keys.Length; i++) { 
    dictionary.Add(keys[i], values[i]); 
} 

我將如何做到這一點沒有循環?可能與Linq?我查看了Array.Join,但無法弄清楚在這種情況下如何使它適用於我。

回答

6

您需要Enumerable.Zip(將鍵和值組合成單個序列)和Enumerable.ToDictionary(將該序列轉換爲字典)。

樣品:

var result = keys.Zip(values, (k,v) => new {k,v}) 
    .ToDictionary(p => p.k, p => p.v); 
6

有一個真棒ToDictionary擴展方法。 Range方法只是循環遍歷索引,並且假定兩個數組都不爲空且長度相同。

var dictionary = Enumerable.Range(0, keys.Length) 
        .ToDictionary(i => keys[i], i => values[i]) 
0

這是2路反正:

var dic = keys.Select((k, i) => new { Key = key, Value = values[i] }) 
       .ToDictionary(p => p.Key, p => p.Value); 

假設keysvalues是對稱的。

相關問題