web-dev-qa-db-ja.com

C#で辞書を(キー、値、値)ペアとして初期化する方法

値をキー、値、値のペアとして保存したい。私のデータはタイプです

Key -> int & both values -> ulong,

そのような辞書の値を初期化してフェッチする方法。 VS-2005を使用しています。

クラスまたは構造体を使用する場合、値をフェッチするにはどうすればよいですか。

11
Royson

値を格納するための構造を作成します。

struct ValuePair
{
    public ulong Value1;
    public ulong Value2;
}

辞書の初期化:

Dictionary<int, ValuePair> dictionary = new Dictionary<int, ValuePair>();

Intをキーとして使用する場合は、Listで十分かもしれません。

リスト:

List<ValuePair> list = new List<ValuePair>();

ValuePairは次のようにlistに追加できます。

list.Add(new ValuePair { Value1 = 1, Value2 = 2 });
17
bniwredyc

両方の値を格納するクラスを宣言してから、通常の辞書を使用できます。例えば:

class Values {
    ulong Value1 {get;set;}
    ulong Value2 {get;set;}
}

var theDictionary=new Dictionary<int, Values>;

theDictionary.Add(1, new Values {Value1=2, Value2=3});
14
Konamiman

これはオプションになります:

Dictionary<int, KeyValuePair<ulong, ulong>> dictionary = new Dictionary<int, KeyValuePair<ulong, ulong>>();

値を追加する場合:Key = 1、Pair = {2,3}

dictionary.Add(1, new KeyValuePair<ulong, ulong>(2, 3));

これらの値を取得する場合:

var valuePair = dictionary[1];
ulong value1 = valuePair.Key;
ulong value2 = valuePair.Value;

または単に:

ulong value1 = dictionary[1].Key;
9
naspinski

System名前空間にTupleクラスを作成します。

public class Tuple<T1,T2>
{
    private readonly T1 _item1;
    private readonly T2 _item2;

    public Tuple(T1 item1, T2 item2)
    {
        this._item1 = item1;
        this._item2 = item2;
    }

    public T1 Item1 { get { return _item1; } }

    public T2 Item2 { get { return _item2; } }
}

また、Createメソッドを持つ静的タプルクラスにより、コンストラクターでは使用できない型推論を取得できます。

public static class Tuple
{
    public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
    {
        return new Tuple<T1, T2>(item1, item2);
    }
}

次に、.NET 4.0にアクセスすると、これらのクラスは基本クラスライブラリにあるため(F#タプルと互換性があるため)削除できます。

6
Mark Rendle

あなたの質問を正しく理解しているかどうかはわかりませんが、ディクショナリの値の部分に複数の値を格納する場合は、次のようにすることができます。

var dic = new Dictionary<int,KeyValuePair<ulong,ulong>>();

次のように辞書への挿入を使用できます。

dic.Add(42, new KeyValuePair<ulong, ulong>(42, 42));
dic.Add(43, new KeyValuePair<ulong, ulong>(43, 43));

そして、次のように値をフェッチします。

foreach (var a in dic)
{
    Console.WriteLine("Key: {0}, Value1: {1}, Value2: {2}",
        a.Key, a.Value.Key, a.Value.Value);
}
1
Sune Rievers

C#4では、値と値のペアにタプルタイプがあります。

タイプとその背後にある設計上の決定を説明する MSDNの記事 があります。

1
Martin R-L

KeyValuePairを利用できます

Dictionary<int, KeyValuePair<ulong,ulong>> vals = new Dictionary<int, KeyValuePair<ulong, ulong>>();
0
Adriaan Stander

Wintellect.PowerCollections名前空間 を見てください。それらは特別な構造Pair <(Of)とそれを操作するコレクションを持っています。そうでない場合は、独自のペアタイプをコーディングする必要があります。

0
Grigory Bushuev

2つの値を保持するために、クラス、たとえばクラスペアを定義し、intをキーとして使用する必要があるかもしれません。

0
Benny