を使用することができます
は、あなたがでTuple<T1,T2>
クラスを使用することができます。
var coll = new Dictionary<Tuple<int,int>, AnyClass>();
coll.Add(new Tuple<int,int>(2, 3), new AnyClass("foo"));
coll.Add(new Tuple<int,int>(4, 2), new AnyClass("bar"));
var foo = coll[new Tuple<int,int>(2,3)];
var bar = coll[new Tuple<int,int>(4,2)];
構文はあまりにも奇妙であるならば、あなたはこのようなクラスをラップすることがあります。タプルクラスを使用しての
public class Dictionary2d<TKey1, TKey2, TItem> : Dictionary<Tuple<TKey1, TKey2>,TItem>
{
public void Add(TKey1 k1, TKey2, TItem item) {
this.Add(Tuple.Create(k1,k2), item);
}
public TItem this[TKey1 k1, TKey2 k2] {
get { return this[Tuple.Create(k1,k2)]; }
}
}
public class Program
{
static void Main() {
var coll = new Dictionary2d<int,int, AnyClass>();
coll.Add(2, 3, new AnyClass("foo"));
coll.Add(4, 2, new AnyClass("bar"));
var foo = coll[2,3];
var bar = coll[4,2];
}
}
の利益、平等、ハッシュコード比較がネイティブに処理されるということですので、たとえそれはクラスであり、同じ値を持つタプルの2つの異なるインスタンスは等価と見なされます。
同じ「キー」値を複数回追加しますか?つまり、あなたはシナリオを取得しますか?(3、4)を追加し、(3、5)を追加して、たとえば、(3、6)を追加しますか?もしそうなら、辞書はT1値がユニークでなければならないので動作しません –
申し訳ありません。私はそれを元に戻しました:¬P '.Add(3、4、element)' – alan2here
あなたが望むのは、疎な行列コレクションです。あなたは 'Tuple'と値のリストを使ってインデックスペアのリストを保持します。 –
ja72