我想用键和值数组初始化一个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一个副本,但它们是无关的,因为该问题并不是要求将键值集合转换为字典,而是将对象列表,每个对象持有一个键和一个值列表,到一个字典。
答案 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);