我想将值存储为键,值,值对。我的数据类型为
Key -> int & both values -> ulong,
如何初始化&获取此类字典的值。我正在使用VS-2005。
如果我使用类或结构,那我该如何获取值。
答案 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类型。