5

有没有办法从 a 中获取第三排HashSet?喜欢

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

是的,我想使用HashSet.

4

4 回答 4

16

AHashSet<T>本质上是无序的。

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

如果您需要保留顺序,那么 aHashSet<T>很可能是要使用的错误集合类型。它并非旨在通过索引保留顺序或访问。

于 2013-05-28T16:43:17.150 回答
4

如果你想平衡顺序和性能,你最好保留两个结构...... O(1) 查找的 HashSet<T> 和枚举(或快速索引访问器查找)的 List<T>。

于 2013-05-28T16:56:03.403 回答
1

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

“位置”的整个概念是 HashSet 的内部实现细节。它在其方法和属性中没有公开任何承诺提供有关位置的信息。所以,对于HashSet的用户来说,位置的概念是不存在的。

于 2013-05-28T17:00:58.297 回答
1

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

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

于 2018-01-17T18:46:20.723 回答