私は値としてオブジェクトのリストを持っているときに、対応するキーを見つけたいと思います。 は私が値がC#のオブジェクトのリストである場合、辞書のキーを見つける方法は?
foreach (var item in dict)
{
foreach (var subItem in item.Value)
{
if (subItem.Equals(foo))
{
Console.WriteLine(item.Key);
}
}
}
、私は何かなどを行うことができます知っている。しかし、これは、私は巨大なデータセットを持っている多くの時間を要し辞書、
Dictionary<string, List<object>> dict = new Dictionary<string, List<object>>();
があるとします。これにはもっと速い解決策がありますか?
私はLINQを使用して、値が与えられたキーを見つけるの通常の方法のようなものであることを知っている:私は私の状況で同様のソリューションを探しています
var keysWithMatchingValues = dict.Where(p => p.Value == myObject).Select(p => p.Key);
。
LINQの使用では、ここで使用されている基本的なアルゴリズムは変更されていません。これが遅すぎる場合は、データ構造を調整して、必要なデータを見つけるために各項目を調べる必要がないようにする必要があります。 – Servy
LINQはほとんどの場合パフォーマンスはそれほど優れていませんが、LINQを使って正確で読みやすいコードを書く方が簡単です。複製が可能でない場合は、リストの代わりに 'HashSet'を使用します。どのような型か分かっているなら、私はオブジェクトの代わりにその型を使うでしょう。 –
提案していただきありがとうございます! – agenthost