1

Foo一意の (たくさんの) オブジェクトがあり、IDこれらを に格納したいと考えていDictionaryます。C# のディクショナリ キーは、任意のプリミティブ型またはオブジェクトにすることができます。整数foo1.IDを key として使用することも、 object として使用することもできますfoo1

IDそれを実装する正しい方法はどれですか?(整数)またはオブジェクトをキーとして使用すると、パフォーマンスに違いがありますか?

注意。ディクショナリ内の値は、他の (タイプの) オブジェクトです。

4

5 に答える 5

2

ユースケースによって異なります。キー値を指定してオブジェクトを検索すると仮定すると、もちろん id をキーにする必要があります。あなたがこの質問をしているということは、辞書はまったく必要ないかもしれないと私に思わせます-アイテムのコレクションを保持する必要があるだけの場合は、List<T>代わりに a を使用します-辞書は、キー(IDなど)を値(例)にマッピングするためのものですカスタム オブジェクト)。

于 2012-04-28T15:22:36.737 に答える
2

どのように辞書を検索するつもりですか? のみに基づいて辞書内の項目を検索する場合はID、それをキーとして使用します。OTOH、のインスタンスを作成する場合はFoo、それをキーにします。


FooRe: あなたの編集 -が「キー」または「プロパティにアクセスすることによってキー値を提供するオブジェクト」のいずれかであることがわかりDictionary<Foo,OtherClass>ました。Fooオブジェクトを適切に - オブジェクトから特定のプロパティを抽出することをルックアップのすべてのインスタンスに強制するのはなぜFooですか?

于 2012-04-28T15:24:05.163 に答える
1

キーとして使用するものは何でも比較できる必要があります。プリミティブ型の場合、通常、期待どおりに等価性が定義されます。オブジェクトの場合、オブジェクトを比較する別の方法を定義しない限り、参照の等価性をテストします。これIComparerは、Dictionaryコンストラクターで適切な型を渡すことで実行できます。

ただし、あなたの場合、へのキー入力intが最も簡単である可能性があります。オブジェクトを独自のキーとして使用しても、実際の利点は得られません。Fooオブジェクトのコレクションを取得して次のようにするだけで、辞書を作成できます。

IDictionary<int, Foo> fooDictionary = fooCollection.ToDictionary(f => f.ID);

ほとんどの場合、指定された ID のコレクションを単純に検索するよりも、ディクショナリを検索する方が効率的です。

于 2012-04-28T15:27:15.550 に答える
1

辞書はKey Value Pairs. 各キーは一意である必要があります。コンパイラは、キーが一意であることを確認する必要があります。キーを整数ではなくオブジェクトとして与えることで、おそらくやり過ぎです。コンパイラは、キー内のオブジェクト全体を比較して、それが一意であることを確認します。したがって、レコードを一意に識別するのに役立つ場合は、整数キーを使用します。

于 2012-04-28T15:30:11.900 に答える
0

ID を使用します。既にオブジェクトを持っている場合は、それを調べても意味がありません。

于 2012-04-28T15:23:11.797 に答える