按位置</t>获取HashSet <t>的元素

时间:2013-05-28 16:37:14

标签: c# hashset

有没有办法从HashSet抓住第三行?喜欢

HashSet<string> ContinuedForums = new HashSet<string>();
ContinuedForums.add("a");
ContinuedForums.add("b");
string hellow = ContinuedForums[1];

是的我想使用HashSet

4 个答案:

答案 0 :(得分:15)

HashSet<T>本质上是无序

您可以通过ContinuedForums.Skip(2).First()获取第三个元素,但这不一定是您添加的“第三个”元素,并且在添加或删除元素时排序会发生变化。

如果您需要保留订单,那么HashSet<T>可能是错误的集合类型。它无意通过索引保留订单或访问权。

答案 1 :(得分:4)

如果你想平衡订单和性能,你最好保留两个结构...... HashSet&lt; T&gt;对于O(1)查找和列表&lt; T&gt;用于枚举(或快速索引访问器查找)。

答案 2 :(得分:1)

如果你在第三个增加的背景下谈论“第三个”,那么就没有办法了。 HashSet不会公开该信息。这是HashSet内部实现的无证副作用,如果你将这些字符串添加到HashSet:“one”,“two”,“three”,你将按照枚举的相同顺序返回内容。超过其内容。但由于这是未记录的行为,因此编写依赖于该行为的代码将是一个很大的错误。原因是未来版本的HashSet可能以完全不同的方式运行。另请注意,如果要从HashSet中删除“two”,然后添加“four”,则枚举HashSet可能会返回“one”,“four”,“three”。

“位置”的整个概念是HashSet的内部实现细节。它没有在其方法和属性中暴露任何东西,这使得任何有关提供位置信息的承诺。因此,就HashSet的用户而言,位置的概念不存在。

答案 3 :(得分:1)

如果集合中的顺序很重要,您可以使用SortedSet

这不会按照您添加它们的顺序为您提供项目,而是会对它们进行排序。