辞書< string、MyObject>またはList< MyObject> C#3.5で?
-
05-07-2019 - |
質問
C#2.0では、一意の識別子を含む文字列として最初のキーを持つ辞書をよく使用します。
C#3.0 +を学習していますが、Listを使用し、そのオブジェクトに対してLINQを実行するだけで特定のオブジェクトを取得できます(.where()を使用)。
だから、よく理解すれば、Dictionaryクラスはその目的を失ったのでしょうか?
解決
いいえ、辞書はキーが与えられたときに物事を取り戻すためにさらに効率的です。
リストを繰り返して、必要なものを見つける必要があります。辞書が検索を行います。
他のヒント
リストがある場合、LINQ selectを実行すると、リスト内のすべてのアイテムがスキャンされ、探しているアイテムと比較されます。
ただし、ディクショナリは、探している文字列のハッシュコードを計算します(GetHashCodeメソッドによって返されます)。この値は、文字列をより効率的に検索するために使用されます。この仕組みの詳細については、ウィキペディアをご覧ください。
数個以上の文字列がある場合、初期(リスト)メソッドは非常に遅くなり始めます。
辞書のアプローチは、LINQよりもはるかに高速になるため、配列に多数の項目がある場合は、辞書を使用する必要があります。
辞書はハッシュテーブルとして実装されます。したがって、ルックアップのための一定時間のアクセスを提供する必要があります。リストは動的な配列として実装され、線形の時間アクセスを提供します。
基礎となるデータ構造に基づいて、ディクショナリのパフォーマンスは向上します。
辞書のMSDNドキュメント
http://msdn.microsoft.com/en-us/library /xfhwa508.aspx
およびリスト