如何在没有循环的情况下将键数组和值数组连接到字典中?

How do I join an array of keys with an array of values to a dictionary without a loop?

我有一组键和值,我想从中创建字典:

var keys = new string[] { "Key1", "Key2" };
var values = new string[] { "Bob", "Tim" };

命令式的方式是这样的:

var dictionary = new Dictionary<string, string>();
for(int i = 0; i < keys.Length; i++) {
  dictionary.Add(keys[i], values[i]);
}

如果没有循环,我将如何做到这一点?可能与 Linq 一起?我看过 Array.Join,但无法弄清楚如何让它在这种情况下对我有用。

您需要 Enumerable.Zip (to combine keys and values into single sequence) and Enumerable.ToDictionary(将该序列转换为字典)。

样本:

var result = keys.Zip(values, (k,v) => new {k,v})
  .ToDictionary(p => p.k, p => p.v);

有一个很棒的 ToDictionary 扩展方法。 Range 方法只是循环索引,它假定两个数组都不为空且长度相同。

var dictionary = Enumerable.Range(0, keys.Length)
                     .ToDictionary(i => keys[i], i => values[i])

反正是2个循环:

var dic = keys.Select((k, i) => new { Key = key, Value = values[i] })
              .ToDictionary(p => p.Key, p => p.Value);

假设 keysvalues 是对称的。