使用键和值数组初始化Dictionary

时间:2017-10-19 17:25:51

标签: c# dictionary

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

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

是否有 fast 方法可以在不重复数组的情况下执行此操作,如:

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

编辑:有人将此问题标记为this一个副本,但它们是无关的,因为该问题并不是要求将键值集合转换为字典,而是将对象列表,每个对象持有一个键和一个值列表,到一个字典。

1 个答案:

答案 0 :(得分: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);

它不会更快,而且据我所知它实际上可能会慢一些,但可能不够重要。

它对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);