最简单的方法,也许是通过扩展方法? :
var MyDic = new Dictionary<string,string>{ "key1", "val1", "key2", "val2", ...};
如果词典结束,条目包含来自简单字符串列表的键和值对,则交替每隔一个字符串作为键和值。
答案 0 :(得分:10)
交替有点痛苦。 就个人而言我只是手写:
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])
抛出异常 - 上述代码将默默使用特定密钥的 last 出现。
答案 1 :(得分:2)
您可以使用列表长度的一半,ToDictionary
从列表中的项目创建字典:
Dictionary<string, string> dictionary =
Enumerable.Range(0, list.Count / 2)
.ToDictionary(i => list[i * 2], i => list[i * 2 + 1]);
答案 2 :(得分:2)
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);
答案 3 :(得分:1)
如果您需要LINQ - 您可以先将Zip列表发送给自己:
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);