如何在C#中将字典初始化为(键,值,值)对

时间:2009-12-04 09:02:09

标签: c# .net dictionary

我想将值存储为键,值,值对。我的数据类型为

Key -> int & both values -> ulong,

如何初始化&获取此类字典的值。我正在使用VS-2005。

如果我使用类或结构,那我该如何获取值。

9 个答案:

答案 0 :(得分:17)

创建一个存储值的结构:

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 });

答案 1 :(得分:14)

您可以声明一个存储两个值的类,然后使用普通字典。例如:

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});

答案 2 :(得分:9)

这是一个选择:

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;

答案 3 :(得分:6)

在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方法的静态Tuple类,因此您可以获得构造函数不可用的类型推断:

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#元组兼容!)。

答案 4 :(得分:1)

我不确定我是否理解你的问题,但是如果你想在Dictionary的值部分存储多个值,你可以这样做:

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);
}

答案 5 :(得分:1)

在C#4中,您的值,值对将具有元组类型。

MSDN article描述其背后的类型和设计决策。

答案 6 :(得分:0)

也许你必须定义一个类说类Pair来保存你的两个值,并使用int作为键。

答案 7 :(得分:0)

您可以使用KeyValuePair

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

答案 8 :(得分:0)

看看Wintellect.PowerCollections Namespace他们有特殊结构Pair&lt;(Of)和集合可以使用它,或者你需要编写你自己的Pair类型。