我需要一个集合,这是一个集合(没有重复的值),并提供快速插入时间。我还需要能够获得一个值的索引。
伪码:
Set.Insert(value)
Set.GetIndex(value)值相对于其他值的位置并不重要,不需要排序。
是否有提供此功能的C#泛型集合?或者,有没有一种方法可以通过组合不同的集合类型来实现?
发布于 2013-04-03 04:38:05
你可以使用HashSet<T>,它不允许重复,而且速度很快。http://msdn.microsoft.com/en-us/library/bb359438.aspx
如果您想获取值的索引,可以将HashSet转换为数组并使用Array.IndexOf(value);但是,HashSet允许您将值本身用作索引,因此您可能不再需要它。
发布于 2013-04-03 04:45:52
我不确定为什么你需要做id = search[key],如果这是理想的,但我就在这里抛出它……
你可以试试OrderedDictionary。
这并不是很理想(就你的搜索而言)--但在内部,它保留了IndexOfKey方法,这正是你所需要的。基本上,它是一个基于ArrayList的实现,它保存了一个项目数组,还有用于快速访问的Dictionary<>等等。
源代码很容易找到(但由于显而易见的原因,我不会在这里链接它)-你可以使用它-也可以调整它。
发布于 2013-04-03 04:58:10
你可以围绕两个字典做一个包装器
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];
}
}当然,这并不完整,但您已经明白了。您可能希望添加更多的错误检查。
https://stackoverflow.com/questions/15773733
复制相似问题