I want to store values as key,value,value pair. My data is of type
Key -> int & both values -> ulong,
How to initialize & fetch values of such dictionary. I am using VS-2005.
If i use a class or struct then how do i fetch the values.
I want to store values as key,value,value pair. My data is of type
Key -> int & both values -> ulong,
How to initialize & fetch values of such dictionary. I am using VS-2005.
If i use a class or struct then how do i fetch the values.
maybe you have to define a class say class Pair to hold your two value, and use int as the key.
You can declare a class that stores both values and then use an ordinary dictionary. For example:
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});
This would be an option:
Dictionary<int, KeyValuePair<ulong, ulong>> dictionary = new Dictionary<int, KeyValuePair<ulong, ulong>>();
If you want to add in a value: Key=1, Pair = {2,3}
dictionary.Add(1, new KeyValuePair<ulong, ulong>(2, 3));
If you want to retrieve those values:
var valuePair = dictionary[1];
ulong value1 = valuePair.Key;
ulong value2 = valuePair.Value;
Or simply:
ulong value1 = dictionary[1].Key;
I'm not sure I understand your question correctly, but if you want to store more than one value in the value part of Dictionary, you could do something like this:
var dic = new Dictionary<int,KeyValuePair<ulong,ulong>>();
You can use insert into the dictionary like this:
dic.Add(42, new KeyValuePair<ulong, ulong>(42, 42));
dic.Add(43, new KeyValuePair<ulong, ulong>(43, 43));
And fetch the values like so:
foreach (var a in dic)
{
Console.WriteLine("Key: {0}, Value1: {1}, Value2: {2}",
a.Key, a.Value.Key, a.Value.Value);
}
You can make use of the KeyValuePair
Dictionary<int, KeyValuePair<ulong,ulong>> vals = new Dictionary<int, KeyValuePair<ulong, ulong>>();
Create a structure to store your values:
struct ValuePair
{
public ulong Value1;
public ulong Value2;
}
Dictionary initialization:
Dictionary<int, ValuePair> dictionary = new Dictionary<int, ValuePair>();
Maybe List is enogh, if you use int as key?
List:
List<ValuePair> list = new List<ValuePair>();
Look at Wintellect.PowerCollections Namespace they have special structure Pair<(Of ) and collections to work with it or you'll need to code your own Pair type.
Create a Tuple class, in the System namespace:
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; } }
}
And a static Tuple class with a Create method so you get type inference which is not available on constructors:
public static class Tuple
{
public static Tuple<T1, T2> Create<T1, T2>(T1 item1, T2 item2)
{
return new Tuple<T1, T2>(item1, item2);
}
}
Then, when you get onto .NET 4.0, you can delete these classes because they're in the Base Class Library (and are compatible with F# tuples!).
In C# 4, you'll have the Tuple type for your value, value pair.
There's an MSDN article describing the type and the design decisions behind it.