我需要一个集合(没有重复值)并提供快速插入时间。我还需要能够得到一个值的索引。
伪代码:
Set.Insert(value)
Set.GetIndex(value)
值相对于其他值的位置无关紧要,不需要排序。
是否有提供此功能的C#泛型集合?或者有没有办法通过组合不同的集合类型来做到这一点?
答案 0 :(得分:1)
您可以使用HashSet<T>
它不允许重复并且速度很快。 http://msdn.microsoft.com/en-us/library/bb359438.aspx
如果要获取值的索引,可以将HashSet
转换为数组并使用Array.IndexOf(value)
;但是,HashSet
允许您将值本身用作索引,因此您可能不再需要它。
答案 1 :(得分:0)
我不确定为什么你需要做id = search[key]
如果这是理想的但我会把它扔到这里......
您可以尝试OrderedDictionary。
这不是理想的(就你的搜索而言) - 但在内部它保留了方法IndexOfKey
,它可以满足你的需要。基本上它是一个基于ArrayList
的实现,它保留了一系列项目+你有Dictionary<>
用于快速访问等。
很容易找到来源(但由于显而易见的原因,我不会在此处链接) - 您可以使用它 - 或者进行调整。
答案 2 :(得分:0)
你可以围绕两个词典创建一个包装器
class MySet<T> {
Dictionary<T,int> valToIndex;
Dictionary<int,T> indexToVal;
int curIndex;
Add(T newItem) {
curIndex++;
valToIndex.Add(newItem, curIndex);
indexToVal.Add(curIndex, newItem);
}
T this[int index] {
get {
return indexToVal[index];
}
}
GetIndexOf(T value) {
return valToIndex[value];
}
}
当然这不完整,但你明白了。您可能希望添加更多错误检查。