最簡單的方法從擴展方法做到這一點,也許? :初始化字典<字符串,字符串>自List <string>
var MyDic = new Dictionary<string,string>{ "key1", "val1", "key2", "val2", ...};
凡字典的條目捲起含有字符串的簡單列表鍵和值對,交替每隔字符串是關鍵和價值。
最簡單的方法從擴展方法做到這一點,也許? :初始化字典<字符串,字符串>自List <string>
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])
拋出一個異常,如果有重複鍵 - 上面的代碼將默默地使用最後發生的特別的關鍵。
+1,因爲它敢於贊成老式的慢速方法而不喜歡可讀的代碼。 – DonBoitnott
'dictionary.Add(...)'而不是'dictionary [...] = ...'具有在鍵被複制時拋出適當異常的優點。 –
@TomBlodget:真。將添加一個註釋。 –
您可以使用範圍是列表的長度的一半,並ToDictionary
創建的,從列表項詞典:
Dictionary<string, string> dictionary =
Enumerable.Range(0, list.Count/2)
.ToDictionary(i => list[i * 2], i => list[i * 2 + 1]);
應該是'list.Count'。沒有'list.Length'。 –
@GrantWinney:當然。感謝您的發現。 – Guffa
如果你需要LINQ - 你可以先郵編名單本身:
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);
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);
你要什麼時候發生的關鍵我s'null'或兩個鍵是否相等或列表的長度是奇數?處理這些問題將形成代碼。 –
在我的情況下,預計非空和獨特的密鑰。由於我不會嘗試將這些鍵用作正常鍵,並且這只是一種簡短的方法 –