2017-10-19 42 views
0

我想初始化一個詞典與鍵和值的數組,如下所示:初始化辭典鍵的排列和值

int[] keys = {1, 2, 3}; 
string[] values = {"a", "b", "c"}; 
Dictionary<int, string> dict = new Dictionary<int, string>(keys, values); 

是否有 快速 辦法做到這一點不反覆的陣列,如:

for (int i = 0; i < keys.Length; ++i) 
{ 
    dict.Add(keys[i], values[i]); 
} 

編輯:有人標誌着這個問題進行this一個重複的,但他們是無關的,因爲這個問題不問轉彎鍵 - 值的集合到一本字典,而是一個列表的對象,每個對象都成立將一個鍵和一個值列表添加到字典中。

+4

的下限複雜度爲*爲O(n)*,所以你將不得不反正迭代。 –

回答

4

使用Zip()

int[] keys = { 1, 2, 3 }; 
string[] values = { "a", "b", "c" }; 

var dict = keys.Zip(values, (num, str) => new { num = num, str = str }) 
      .ToDictionary(ns => ns.num, ns => ns.str); 

它不會更快,併爲所有我知道它實際上可能是一個慢一點,但可能還不足以關係。

它對您的for循環的一個明顯優勢是Zip()不會拋出異常,如果values.Length < keys.Length


一旦the C#7 value tuple feature is usable without any nonsense,你就可以節省幾個大字:

var dict = keys.Zip(values, (num, str) => (num: num, str: str)) 
      .ToDictionary(ns => ns.num, ns => ns.str);