我正在寻找一个系列。
我需要能够像使用2D整数键一样添加元素,例如.Add(3, 4, element)
。如果我在集合的范围之外添加我需要扩展的集合,这包括负面,虽然它可以有一个限制,例如Int16的范围将是好的。集合中的每个元素都可以具有相同的类型,但我需要指定它是什么,例如Set<type> s;
我还需要避免慢速操作,例如在查找元素时进行搜索,在添加到集合时性能不那么重要。
有没有人对使用什么方法或最好能为答案提供课程有任何想法。
答案 0 :(得分:2)
如果您需要复合键,可以使用Dictionary<Tuple<T1,T2>, TItem>
中的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];
}
}
使用Tuple类的好处是,本机处理相等和哈希码比较,因此即使它是一个类,具有相同值的两个不同的元组实例也将被视为等于。
答案 1 :(得分:1)
听起来你想要Dictionary<int, T>
。
答案 2 :(得分:1)
您可以通过将其数据存储在Set<T>
类型的私有变量中来实现此Dictionary<int, Dictionary<int, T>>
。
然后您可以使用
进行存储public void Add(int key1, int key2, T value)
{
_storage[key1][key2] = value;
}