最简单的方法,也许是通过扩展方法来实现?:
var MyDic = new Dictionary<string,string>{ "key1", "val1", "key2", "val2", ...};
当字典包含键和值对的条目时,这些键和值对来自简单字符串列表,每隔一个字符串交替出现作为键和值。
最简单的方法,也许是通过扩展方法来实现?:
var MyDic = new Dictionary<string,string>{ "key1", "val1", "key2", "val2", ...};
当字典包含键和值对的条目时,这些键和值对来自简单字符串列表,每隔一个字符串交替出现作为键和值。
更改这个东西有点麻烦。就我个人而言,我会直接手写它:
var dictionary = new Dictionary<string, string>();
for (int index = 0; index < list.Count; index += 2)
{
dictionary[list[index]] = list[index + 1];
}
使用LINQ肯定可以做到,但会更加复杂 - 当LINQ可以使事情变得更简单时,我喜欢使用它,但有时它并不是一个很好的选择。
(显然,您可以将其封装成扩展方法。)
请注意,您可以使用dictionary.Add(list[index], list[index + 1])
来抛出异常,如果存在重复的键 - 上述代码将默默地使用特定键的最后一次出现。
dictionary.Add(...)
而不是dictionary[...] = ...
的优点在于当键重复时抛出适当的异常。 - Tom Blodget您可以使用列表长度的一半作为范围,并使用 ToDictionary
从列表中的项创建字典:
Dictionary<string, string> dictionary =
Enumerable.Range(0, list.Count / 2)
.ToDictionary(i => list[i * 2], i => list[i * 2 + 1]);
LINQ和GroupBy
版本:
var dict = source.Select((s, i) => new { s, i })
.GroupBy(x => x.i / 2)
.ToDictionary(g => g.First().s, g => g.Last().s);
var result = list.Where((item, id) => id % 2 == 0)
.Zip (list.Where((item, id) => id % 2 == 1),
(key, value) => new KeyValuePair<string,string>(key, value))
.ToDictionary(p => p.Key, p => p.Value);
null
或两个键相等或列表长度为奇数时,您希望发生什么?处理这些问题将塑造代码。 - Tom Blodget