我想用键和值的数组初始化一个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)
编辑:有人标志着这个问题进行重复这一个,但他们是无关的,因为这个问题不问转弯键-值的集合到一本字典,而是对象的列表,每个对象拿着钥匙和列表值,到字典。
用途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)