哪个通用快速集合(set)提供了getIndexFromValue或类似的?

时间:2013-04-02 20:27:40

标签: c# collections set

我需要一个集合(没有重复值)并提供快速插入时间。我还需要能够得到一个值的索引。

伪代码:

Set.Insert(value)
Set.GetIndex(value)

值相对于其他值的位置无关紧要,不需要排序。

是否有提供此功能的C#泛型集合?或者有没有办法通过组合不同的集合类型来做到这一点?

3 个答案:

答案 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];
    }
}

当然这不完整,但你明白了。您可能希望添加更多错误检查。