【问题标题】:GetElement from HashSet<T> in O(1)在 O(1) 中从 HashSet<T> 中获取元素
【发布时间】:2014-01-02 17:45:09
【问题描述】:

我编写了一个代码,但我需要它更快地工作,而不是 O(n)。

    public T GetElementAt(int index)
    {        
        return hashSet.ElementAt(index);
    }

还有一个

    public T GetElementAt(int index)
    {
        var enumerator = hashset.GetEnumerator();
        for (int i = 0; i < index; i++)
        {
            enumerator.MoveNext();
        }
        return enumerator.Current;
    }

请帮帮我,我不知道该怎么做。

附:对不起我的英语不好。

【问题讨论】:

  • 旁注:HashSet 在任何意义上都没有排序,所以选择第 n 个元素和第一个元素一样好......你真的需要对 HashSet 进行索引访问吗?
  • 如果你想 O(1) 通过索引访问有序集合中的元素,有什么理由不使用List&lt;T&gt;

标签: c# .net hashset


【解决方案1】:

您似乎将HashSet&lt;T&gt; 用于错误的目的。

套装设计用于:

  1. 确保唯一性
  2. 能够在需要时提取所有成员
  3. 检查提供的项目是否已经是成员

HashSet&lt;T&gt; 完成上述操作,而且速度非常快。但这几乎就是它所做的一切。

集合没有顺序,因此尝试获取 nth 值实际上没有任何意义或用途。

对于您正在做的事情(O(1) 通过编号项目偏移量访问),List&lt;T&gt; 会做得很好。

这个答案here 更详细地描述了HashSet&lt;T&gt; 的用途。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-08-09
    • 1970-01-01
    • 2016-10-04
    • 2016-02-26
    • 1970-01-01
    相关资源
    最近更新 更多