用键和值的数组初始化一个Dictionary

Hey*_*ude 0 c# dictionary

我想用键和值的数组初始化一个Dictionary,如下所示:

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

有没有一种快速的方法可以执行而不迭代数组,如:

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

编辑:有人标志着这个问题进行重复一个,但他们是无关的,因为这个问题不问转弯键-值的集合到一本字典,而是对象的列表,每个对象拿着钥匙和列表值,到字典。

15e*_*153 5

用途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);
Run Code Online (Sandbox Code Playgroud)

它不会更快,就我所知,它实际上可能会慢一点,尽管可能还不够重要。

for循环相比,它的一个明显优势是Zip()if不会引发异常values.Length < keys.Length


一旦C#7值元组功能可用而没有任何废话,您将能够保存一些字符:

var dict = keys.Zip(values, (num, str) => (num: num, str: str))
           .ToDictionary(ns => ns.num, ns => ns.str);
Run Code Online (Sandbox Code Playgroud)