這裏是我的回答。當字典變大時,您可能會發現GroupBy()擴展方法的效率比您想要的要低,因爲它們提供了許多您不需要的保證,例如保留順序。
public static class DictionaryExtensions
{
public static IDictionary<TValue,List<TKey>> Reverse<TKey,TValue>(this IDictionary<TKey,TValue> src)
{
var result = new Dictionary<TValue,List<TKey>>();
foreach (var pair in src)
{
List<TKey> keyList;
if (!result.TryGetValue(pair.Value, out keyList))
{
keyList = new List<TKey>();
result[pair.Value] = keyList;
}
keyList.Add(pair.Key);
}
return result;
}
}
而且在LinqPad使用一個例子:
void Main()
{
var prices = new Dictionary<int, int>();
prices.Add(1, 100);
prices.Add(2, 200);
prices.Add(3, 100);
prices.Add(4, 300);
// Dump method is provided by LinqPad.
prices.Reverse().Dump();
}
謝謝,但,值包含所有對象,我只想從原始字典中的鍵 – user1260827
@ user1260827,抱歉錯過了一件事,現在可以嘗試查詢。我剛剛在VS和它的工作中嘗試過它 – Habib
謝謝。這是我需要的。 – user1260827