Oto moja odpowiedź. Gdy słowniki stają się duże, najprawdopodobniej metody grupowania w GroupBy() staną się mniej efektywne niż chcesz, ponieważ zapewniają wiele gwarancji, których nie potrzebujesz, takich jak zachowanie zamówienia.
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;
}
}
i przykład do wykorzystania w 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();
}
Dzięki, ale , wartości zawiera wszystkie obiekty, chcę tylko klucze z oryginalnego słownika – user1260827
@ user1260827, przepraszam brakowało jednej rzeczy, możesz spróbować zapytanie teraz. Właśnie wypróbowałem to w VS i jego działaniu – Habib
Dzięki. To jest to, czego potrzebuję. – user1260827