0

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

伪代码:

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

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

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

4

3 回答 3

1

您可以使用HashSet<T> 它不允许重复并且速度很快。 http://msdn.microsoft.com/en-us/library/bb359438.aspx
如果要获取值的索引,可以将 转换HashSet为数组并使用Array.IndexOf(value); 但是,HashSet允许您将值本身用作索引,因此您可能不再需要它。

于 2013-04-02T20:38:04.950 回答
0

我不确定你为什么需要这样做id = search[key],如果这是理想的,但我会把它扔在这里......

你可以试试OrderedDictionary

这并不理想(就您的搜索而言) - 但在内部它保留了IndexOfKey您所需要的方法。基本上,它是一个基于ArrayList保留一系列项目的实现+您可以Dictionary<>快速访问等。

来源很容易找到(但出于显而易见的原因,我不会在此处链接它)-您可以使用它-或对其进行调整。

于 2013-04-02T20:45:51.623 回答
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];
    }
}

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

于 2013-04-02T20:58:09.513 回答