我想反轉鍵和字典的值。 I.e源詞典Dictionary<int, string>
,我想獲得Dictionary<string, List<int>>
。有List<int>
,因爲值可以在不同的密鑰下多次在源字典中。反轉鍵和字典中的值
例子:
{
1: "A"
2: "A"
3: "A"
4: "B"
5: "B"
6: "C"
7: "D"
}
將轉變爲:
{
"A": [1,2,3]
"B": [4,5]
"C": [6]
"D": [7]
}
感謝您的幫助。
編輯:
OK,從你們的幫助,我能夠了解一點這個算法。 現在我看到了兩種可能的解決方案(除其他之外),並且不知道它們之間的真正區別是什麼,因爲結果似乎是相同的。
是否有任何性能問題?
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
var byGroupBy = actions.GroupBy(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
編輯2:
最後我用剛剛
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
我沒想到會是這麼簡單。 謝謝大家。
你想創建一個從字典查找?如果是這種情況,ToLookup()擴展方法就是你的朋友。 – Baldrick
@B ...我試圖找出它,但無法通過所有參數和重載讓我的頭在GroupBy方法上。 – sidon
只需'var byLookup = actions.ToLookup(pair => pair.Value,pair => pair.Key)'就足夠了,您並不需要對ToDictionary進行調用。 –