C# - 添加新元素时返回索引的集合

标签 c# .net performance collections set

我正在寻找符合以下条件的集合:

  1. 集合中的元素永远不会重复。也就是说,某事ISet<T> -就像。
  2. 除非从集合中删除元素,否则集合中元素的顺序不会改变。 (在我的用例中,我根本不删除任何元素)。
  3. 我希望能够获取刚刚添加的元素的索引。由于要求 1,这意味着:接收该元素的索引(如果该元素已存在于集合中)或接收类似 .Count 的内容。如果该元素不存在。

我尝试使用OrderedSet集合,然后使用单行扩展方法获取元素的索引。问题是,每次我尝试在已经包含数千个元素的集合中添加新元素时,我的机器上大约需要 100 毫秒。当向一个巨大的集合中添加大量元素时,这是一件大事。

我怀疑获取索引可以在添加元素的同一位置完成。因此,我正在寻找一个可能存在的用于此目的的集合。

提前谢谢您。

最佳答案

怎么样:

public class SpecialList<T> : List<T>
{
    public new int Add(T Item)
    {
        if (Contains(Item))
        {
            return IndexOf(Item);
        }
        else
        {
            base.Add(Item);
            return Count - 1;
        }
    }
}

关于C# - 添加新元素时返回索引的集合,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33787915/

相关文章:

c# - 安装 Windows 服务时的凭据

c# - 使用 C# 中的串行端口从地磅机获取重量

c# - 在具有 32 个以上逻辑内核的系统上使用 Process.ProcessorAffinity

c++ - 性能:一次做所有事情,还是每个操作循环几次?

java - 在 DynamoDB 中存储和搜索 map ?

c# - 返回与正则表达式匹配的有限集

c# - 获取 RotateTransform 的结果大小

c# - 在 Entity Framework 中尝试更新时出现错误 "A referential integrity constraint violation occurred"

c# - 具有存储库模式的 Entity Framework 插入多对多

javascript - 事件处理程序的性能是否取决于子元素的数量