私はName
のタイプのプロパティを含むクラス(SomeClass
)を持っています。そして、私はそのクラスの配列を格納し、その名前で項目を見つける必要があります。この目的のために、KeyedCollection
とDictionary
の2種類のコレクションがあります。私の質問は次のようなものです:それらの場合とその場合の違いKeyedCollection
とDictionary
を使用する方が良いですか?説明の助けをありがとう。辞書またはKeyedCollection?
答えて
KeyedCollectionは抽象的であるため使用できません:http://msdn.microsoft.com/en-us/library/ms132438.aspx。つまり、オブジェクトを作成することはできません。ここで
これは継承のために特別に設計されたものなので、OPが尋ねる比較は、KeyedCollectionから継承したものと辞書を使用することです。 – mattmc3
は辞書とKeyedCollectionの違いについての良い説明は次のとおりです。http://geekswithblogs.net/NewThingsILearned/archive/2010/01/07/using-keyedcollectionlttkey-titemgt.aspx
主なポイントは以下のとおりです。
- KeyedCollectionは抽象的なので、あなたはそれを直接使用することはできません。
- KeyedCollectionは、キーがエンティティ自体にある場合に便利です。次に、キーの取得をコレクションの実装内にカプセル化できます。
- KeyedCollectionの一般的な実装はありますが(フレームワークではありません)、キー取得デリゲートをコレクションコンストラクタに貼り付けることができるので、アイテムを追加するたびに繰り返す必要はありません。
デフォルトでは、KeyedCollectionは、表の下にディクショナリを作成します。
KeyがValueの一部として意味を持ち、一意性を定義している場合は、それがKeyedCollectionの目的です。
あなたは辞書のバッキングを変更したい場合は、このctorのを使用しては:前のコメントの
protected KeyedCollection(
IEqualityComparer<TKey> comparer,
int dictionaryCreationThreshold)
なし2間の最も重要な違いに対処していない: KeyedCollectionは、彼らがされた順にアイテムを保持します追加された最初のアイテムはインデックス0にあり、最後に追加されたアイテムは最後のインデックスに追加されます。ディクショナリは(または少なくともそれを行うことは保証されていません)。
このようなKeyedCollectionの利点は、パフォーマンスの低下につながります。カバーの下では、ディクショナリとリストの両方を維持するコストを負担します。
KeyedCollectionは、変更可能なキーとキーの変更を管理する方法を許可します。辞書はキーの変更を許可しません。第2に、ルックアップを必要とするコレクションがある場合、エンティティからキーを抽出するロジックは1つの場所に残ります。辞書を維持すると、アイテムが辞書に追加/削除される各場所にキー抽出ロジックを配置する必要があります。
KeyedCollection
は、キーがアイテム自体にあるときに使用する必要があります。
既定では、KeyedCollection
は、辞書を囲むラッパーです(Collection<TItem>
)。小さなコレクションを使用したりアイテムを直接取得したりする場合は、dictionaryCreationThreshold
パラメータを取り、Dictionary
に切り替えるコレクションの数を示すKeyedCollection
provides a constructorが必要です。
KeyedCollection
のもう1つの特徴は、(その型が一致している限り)キーのプロパティを切り替えることができるということです。これは二重キー項目などに適しています。 KeyedCollection
個のインスタンスを生成する場合や、実際に大きなコレクションを使用する場合(辞書があるかどうかを調べるために内部のnull
チェックがある場合を除く)は、パフォーマンスライブラリをラップするとオーバーヘッドが大きくなるとは思われません。
私がKeyedCollection
で見ることを望むことの1つはun abstract
ですが、一般的なコンクリートタイプを簡単にすることができます。
- 1. KeyedCollectionはint型
- 2. データバインディングwpf KeyedCollection
- 3. KeyedCollection with MutableKey
- 4. リストされた辞書またはクラス
- 5. BSTまたはスペルチェックのハッシュテーブル辞書
- 6. ControlTemplateまたはDataTemplate内のカスタムリソース辞書
- 7. ランダムリストのPythonリスト(または辞書)
- 8. 2d辞書テーブルまたはルックアップテーブル?
- 9. ジップ2つのHashMaps(または辞書)
- 10. 多型またはプロパティの辞書?
- 11. 辞書のプロパティまたはメソッド
- 12. は、作成した辞書
- 13. 辞書辞書python
- 14. Jsonは辞書内で辞書をシリアライズ
- 15. 関数は辞書を辞書として返しますか?
- 16. 辞書の辞書はその値を失います
- 17. C#辞書内の辞書
- 18. 辞書のpython辞書
- 19. ユーザー辞書のリソース辞書
- 20. ソート辞書や辞書
- 21. 辞書内の辞書javascript
- 22. 辞書の処理辞書
- 23. 辞書を辞書にロード
- 24. KeyedCollectionは何のコレクションですか?
- 25. 辞書リテラルは
- 26. は、辞書
- 27. 辞書は
- 28. は辞書
- 29. JavaScriptは:辞書
- 30. は辞書
KeyedCollectionの利点は、少なくともシリアライゼーションプロセスを制御している場合は、List <>部分をシリアライズして「ワイヤで」送信すればよいことです。 List <>部分を直列化または送信する必要はありません。List <>部分の逆シリアル化の一部として受信側で再構築できるからです。 – RenniePet