有没有办法从HashSet
抓住第三行?喜欢
HashSet<string> ContinuedForums = new HashSet<string>();
ContinuedForums.add("a");
ContinuedForums.add("b");
string hellow = ContinuedForums[1];
是的我想使用HashSet
。
答案 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。
这不会按照您添加它们的顺序为您提供项目,而是会对它们进行排序。