複数のvaulesディクショナリに対して1つのキーが必要になることがよくありますが、C#では、それらのほとんどはディクショナリとハッシュテーブルのような2つの次元です。
私はこのようなものが欲しい:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
dtinside<>はデータ型を意味します。誰かがこれについての考えを持っていますか?
複数のvaulesディクショナリに対して1つのキーが必要になることがよくありますが、C#では、それらのほとんどはディクショナリとハッシュテーブルのような2つの次元です。
私はこのようなものが欲しい:
var d = new Dictionary<key-dt,value1-dt,value2-dt,value3-dt,value4-dt>();
dtinside<>はデータ型を意味します。誰かがこれについての考えを持っていますか?
ディクショナリはキーと値のペアであり、キーに応じて値がフェッチされます。キーはすべて一意です。
ここ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);
}
}
適切なキーフィールドと適切な値フィールドの両方をクラスで説明します。そして、それらのタイプの辞書を使用します。
var dictionary = new Dictionary<TheKeyType, TheValuesType>();
注:キーとして機能する複数の値がある場合は、それらの値をカプセル化するクラスを定義し、GetHashCodeとEqualsの適切なオーバーライドを提供して、ディクショナリがそれらの同等性を認識できるようにします。
これを行う以外に、タプルを利用できますが、タプルは自己記述的ではないため、このパターンを制限する必要があります。
var dictionary = new Dictionary<Tuple<Key1Type, Key2Type, Etc>, Tuple<Value1Type, Value2Type, Etc>>();
完全に有効なソリューションであるタプルを使用する代わりに、キーや値として独自のクラスを作成することをお勧めします。
タプルがコードを読みにくくなることに気付くかもしれません。
キーとしてタプルを使用します。
var d = new Dictionary<Tuple<string,string,bool,int>,any-data-typs>();