2

私が欲しいのは基本的に、辞書とリストのハイブリッドであるコレクションです。キーと値のペアを (ディクショナリのように) 追加できるコレクションが必要ですが、同時に (リストのように) 追加したのと同じ順序で (キーなしで) 値を取得できますか? そのようなコレクションは .NET に存在しますか?

ありがとう

4

4 に答える 4

13

あなたが望むことをする、と呼ばれる非一般的なデータ構造がOrderedDictionaryあります。これには 2 つのインデクサーがありObjectますint。追加した順序で内容を列挙することもできます。

ディクショナリ ルックアップがO (1) (つまり高速) 動作を実現するかどうかについては、ドキュメントには何も表示されません。実装されていることを考えると、ISerializableオブジェクトのハッシュ コードを使用する可能性が非常に高いため、O (1) ディクショナリ ルックアップがあります。

List<T>aと a の両方をカプセル化する独自のジェネリック型を作成することもできますDictionary<TKey,TValue>

于 2010-09-10T10:58:33.180 に答える
2

System.Collections.ObjectModel.KeyedCollectionは、辞書のキーが値から導出可能でなければならないことを除いて、あなたが求めているものに非常に近いものです。

于 2010-09-12T18:33:08.063 に答える
0

いいえ、現時点ではこの機能を実装するフレームワークには何もありません(ただし、以下の編集を参照してください)。

基本的に、あなたはあなた自身のクラスでList<T>とを構成したいと思うでしょう。Dictionary<TKey, TValue>

OrderedDictionary編集:ウェズリーヒルが指摘したように、私は本当に忘れていました-しかし、このようなフレームワークにジェネリックコレクションがあるとは思いません。実際にジェネリックコレクションが必要だと思いますか?もちろん、ラッパーを書くこともできますOrderedDictionary...

編集:クイックノート:コレクションをラップするのは難しいことではありませんが、一般的なコレクションの利点の1つであるボクシングの回避が失われます。もちろん、キーと値が参照型であれば問題ありません。

于 2010-09-10T10:47:48.697 に答える
0
  • 辞書をラップする新しいクラスを作成します
  • データを追加するときは、インデックスを導入する小さなヘルパー クラスでデータをラップします。
  • 値を返すときは、インデックスに従って並べ替えます

パフォーマンスモンスターではありませんが、うまく機能するはずです。それ以外の場合は、Java のように独自のLinkedHashMapを実装できます。

ところで、これを見てください: LinkedHashMap in .NET

編集: wesleyhills のアイデアがさらに好きです: List と Dictionary を 1 つのクラスにカプセル化します。両方に常に追加し、Dictionary.Values の代わりにリストを返します。

于 2010-09-10T11:01:47.813 に答える