.NET を使用して項目の個別のリストを作成する最も効率的な方法は何ですか?
-
19-09-2019 - |
質問
大きな値のリスト (100 ~ 200 文字列) があり、それらの個別のリストを返す必要があります。.NET を使用してこれを行う最も効率的な方法は何ですか?私が考えることができる方法は次の 2 つです。
- IEnumerable クラスの Distinct() メソッドを使用する
- 辞書を使う
辞書のアプローチの方が実際の意味で高速である場合は、コードの保守性に関するトレードオフの決定を検討してください。
解決
私はEnumerable.Distinct
はあなたが一度だけそれをやっている場合は、辞書を使用するのと同じ速さについてであることを期待します。維持、あなたが追加/値を削除し、明確なネスを維持することができるようにしたい場合は、私はボンネットの下にやっている明確な期待するものは基本的である(HashSet<string>
を構築することができ、それはそれらを見つけるとDistinct()
は明らかに新しい値を返します。オーダーます。
実際には、単に使用します:
HashSet<string> distinctItems = new HashSet<string>(list);
あなたが台無しにされている順序を気にしない場合は、は、かなり良い(と簡単な)ソリューションとなります。 (あなたがが本当には、キーを値にマッピングしたくないとして)それだけでなく、概念的クリーナーDictionary
を使用するよりも簡単です、と。
(いつものように、私はそれを最初に最も読みやすい解決策を見つけること、およびベンチマークを示唆している - それは「十分に速い」だならば、それで行く、あなたが別のクエリの一部としてこれを使用したい場合は、Distinct
が良くなることがあります。最も読みやすい方法です。そうでなければ、私はHashSet
をお勧めしたい。)
他のヒント
私は個人的にはLINQが提供する個別()メソッドで行くだろう。それは読んで維持するためにはるかに簡単です。 LINQを使用しながら、差が小さくなります(場合には、あなたがリストアップしました)とは、データベース・クエリやWebサービス呼び出しを最適化し、より良い時間を過ごすだろう辞書を使用するよりも遅くなります。
私はあなたがここにプロファイリングを使用するsiggestます。ソートそれは両方の方法を使用して、1Mの時間を言うと、それぞれの方法で使用される時間を測定し、サンプルアイテムのリストを生成します。
可読性が懸念され、GetDistinctItems
メソッドを作成し、その中にあなたのコードを配置した場合:ほら、自己文書化されたコードを