元组(或阵列)作为字典键C# [英] Tuples( or arrays ) as Dictionary keys in C#
问题描述
我试图在C#中的字典查找表。我需要解决值的3元组,将一个字符串。我试着用数组作为键,但没有工作,我不知道还能做什么。在这一点上,我考虑将字典辞书的解释,但是这可能不会很pretty看,虽然这是我会怎么做它的JavaScript。
I am trying to make a Dictionary lookup table in C#. I need to resolve a 3-tuple of values to one string. I tried using arrays as keys, but that did not work, and I don't know what else to do. At this point I am considering making a Dictionary of Dictionaries of Dictionaries, but that would probably not be very pretty to look at, though it is how I would do it in javascript.
推荐答案
如果您是在.NET 4.0使用一个元组:
If you are on .NET 4.0 use a Tuple:
lookup = new Dictionary<Tuple<TypeA, TypeB, TypeC>, string>();
如果不是你可以定义一个元组并用其作为重点。元组需要重写GetHash code,平等相待,IEquatable:
If not you can define a Tuple and use that as the key. The Tuple needs to override GetHashCode, Equals and IEquatable:
struct Tuple<T, U, W> : IEquatable<Tuple<T,U,W>>
{
readonly T first;
readonly U second;
readonly W third;
public Tuple(T first, U second, W third)
{
this.first = first;
this.second = second;
this.third = third;
}
public T First { get { return first; } }
public U Second { get { return second; } }
public W Third { get { return third; } }
public override int GetHashCode()
{
return first.GetHashCode() ^ second.GetHashCode() ^ third.GetHashCode();
}
public override bool Equals(object obj)
{
if (obj == null || GetType() != obj.GetType())
{
return false;
}
return Equals((Tuple<T, U, W>)obj);
}
public bool Equals(Tuple<T, U, W> other)
{
return other.first.Equals(first) && other.second.Equals(second) && other.third.Equals(third);
}
}
这篇关于元组(或阵列)作为字典键C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!