首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >哪个通用fast集合(set)提供getIndexFromValue或类似功能?

哪个通用fast集合(set)提供getIndexFromValue或类似功能?
EN

Stack Overflow用户
提问于 2013-04-03 04:27:40
回答 3查看 112关注 0票数 0

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

伪码:

代码语言:javascript
运行
复制
Set.Insert(value)
Set.GetIndex(value)

值相对于其他值的位置并不重要,不需要排序。

是否有提供此功能的C#泛型集合?或者,有没有一种方法可以通过组合不同的集合类型来实现?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-04-03 04:38:05

你可以使用HashSet<T>,它不允许重复,而且速度很快。http://msdn.microsoft.com/en-us/library/bb359438.aspx

如果您想获取值的索引,可以将HashSet转换为数组并使用Array.IndexOf(value);但是,HashSet允许您将值本身用作索引,因此您可能不再需要它。

票数 1
EN

Stack Overflow用户

发布于 2013-04-03 04:45:52

我不确定为什么你需要做id = search[key],如果这是理想的,但我就在这里抛出它……

你可以试试OrderedDictionary

这并不是很理想(就你的搜索而言)--但在内部,它保留了IndexOfKey方法,这正是你所需要的。基本上,它是一个基于ArrayList的实现,它保存了一个项目数组,还有用于快速访问的Dictionary<>等等。

源代码很容易找到(但由于显而易见的原因,我不会在这里链接它)-你可以使用它-也可以调整它。

票数 0
EN

Stack Overflow用户

发布于 2013-04-03 04:58:10

你可以围绕两个字典做一个包装器

代码语言:javascript
运行
复制
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];
    }
}

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15773733

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档