はここに私の返事です。ディクショナリが大きくなると、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