2

2 つの質問がありました。リストの同じノードにクラスと整数を格納できるように、C# ライブラリに 1 つだけではなく値のペアを格納する簡単なクラスがあるかどうか疑問に思っていました。コンテナクラスを作るのが一番簡単だと思いますが、毎回余計な手間がかかります。そうすべきかどうかを知りたかったのです。.NET の新しいバージョン (私は 3.5 を使用しています) では、保存できるタプルがあることを知っていますが、それは利用できません。

より大きな問題は、O(1) でアクセスする必要がなく、リストを検索する余裕があるにもかかわらず、辞書を使用して整数クラス マップを格納することのメモリの欠点は何だと思いますか? ハッシュ テーブルの最小サイズは? 必要なラッパー クラスを作成する必要がありますか?

4

5 に答える 5

6

List<Tuple<T1, T2>>(またはList<KeyValuePair<T1, T2>>) vsの決定Dictionary<T1, T2>は、主にそれをどうしたいかによって決まります。

特定のキー値に基づいて頻繁にルックアップを行う必要なく、情報を保存してから反復する場合は、Listおそらく a が必要です。使用方法LinkedListによっては、メモリ オーバーヘッドがわずかに高く、コンテンツ操作 (追加/削除) 操作が高速なため、さらに優れている可能性があります。

一方、主に最初の値をキーとして使用して頻繁に検索する場合、 aDictionaryはこの目的のために特別に設計されています。キー値の検索と比較は大幅に改善されているため、キーを多く使用し、リストが大きい場合は、ディクショナリを使用すると速度が大幅に向上します。

データサイズは決定にとって重要です。数百個以下のアイテムについて話している場合Listは、おそらく a で問題ありません。その点を超えると、ルックアップ時間はおそらく実行時間により大きな影響を与えるため、Dictionaryより価値があるかもしれません.

厳格なルールはありません。ユースケースはそれぞれ異なるため、要件とオーバーヘッドのバランスを取る必要があります。

于 2013-05-28T23:00:00.540 に答える
6

の順序付けられていないリストを保存する必要がある場合は{integer, value}、ラッパー クラスを作成することをお勧めします。integer検索して get value(または検索しvalueて get )できるデータ構造が必要な場合integerは、辞書をお勧めします。

于 2013-05-28T22:05:56.773 に答える
1

KeyValuePair のリストを使用できます: http://msdn.microsoft.com/en-us/library/5tbh8a42.aspx

于 2013-05-28T22:04:41.273 に答える
0

Tuple<T,T1>、のリスト、KeyValuePair<T, T1>または匿名型を使用できます。

var list = something.Select(x => new { Key = x.Something, Value = x.Value });
于 2013-05-28T22:14:50.943 に答える