16

複数のvaulesディクショナリに対して1つのキーが必要になることがよくありますが、C#では、それらのほとんどはディクショナリとハッシュテーブルのような2つの次元です。

私はこのようなものが欲しい:

var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();

dtinside<>はデータ型を意味します。誰かがこれについての考えを持っていますか?

4

4 に答える 4

25

ディクショナリはキーと値のペアであり、キーに応じて値がフェッチされます。キーはすべて一意です。

ここDictionaryで、1つのキータイプと複数の値タイプが必要な場合は、いくつかのオプションがあります。

最初は使用することですTuple

var dict = new Dictionary<KeyType, Tuple<string, string, bool, int>>()

もう1つは、(C#4.0以降で)使用することです。

var dict = new Dictionary<KeyType, dynamic>()

System.Dynamic.ExpandoObject任意のタイプの値を持つことができます。

using System;
using System.Linq;
using System.Collections.Generic;

public class Test {
   public static void Main(string[] args) {
        dynamic d1 = new System.Dynamic.ExpandoObject();
    var dict = new Dictionary<int, dynamic>();
        dict[1] = d1;
        dict[1].FooBar = "Aniket";
        Console.WriteLine(dict[1].FooBar);
        dict[1].FooBar = new {s1="Hello", s2="World", s3=10};
        Console.WriteLine(dict[1].FooBar.s1);
        Console.WriteLine(dict[1].FooBar.s3);
   }
}
于 2013-02-20T18:35:51.813 に答える
6

適切なキーフィールドと適切な値フィールドの両方をクラスで説明します。そして、それらのタイプの辞書を使用します。

var dictionary = new Dictionary<TheKeyType, TheValuesType>();

注:キーとして機能する複数の値がある場合は、それらの値をカプセル化するクラスを定義し、GetHashCodeとEqualsの適切なオーバーライドを提供して、ディクショナリがそれらの同等性を認識できるようにします。

これを行う以外に、タプルを利用できますが、タプルは自己記述的ではないため、このパターンを制限する必要があります。

var dictionary = new Dictionary<Tuple<Key1Type, Key2Type, Etc>, Tuple<Value1Type, Value2Type, Etc>>();
于 2013-02-20T18:25:34.267 に答える
3

完全に有効なソリューションであるタプルを使用する代わりに、キーや値として独自のクラスを作成することをお勧めします。

タプルがコードを読みにくくなることに気付くかもしれません。

于 2013-02-20T18:26:28.960 に答える
0

キーとしてタプルを使用します。

var d = new Dictionary<Tuple<string,string,bool,int>,any-data-typs>();
于 2013-02-20T18:24:40.500 に答える