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

时间:2015-02-09 03:56:59

标签: c# linq

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

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,但在这种情况下无法弄清楚如何让它适用于我。

3 个答案:

答案 0 :(得分:6)

您需要Enumerable.Zip(将键和值组合成单个序列)和Enumerable.ToDictionary(将该序列转换为字典)。

样品:

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

答案 1 :(得分:6)

有一个很棒的ToDictionary扩展方法。 Range方法只是循环遍历索引,并假设两个数组都不是null且长度相同。

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

答案 2 :(得分:0)

无论如何它都是2个循环:

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

假设keysvalues是对称的。