枚举Hashset的速度

ief*_*fpw 1 c# performance hashset

Hashset<string>C#中的这两个枚举之间是否有任何性能差异?

foreach(string value1 in Hashset1) {

}
Run Code Online (Sandbox Code Playgroud)

for(int i = 0; i < Hashset1.Count; i++) {
    string _value1 = Hashset1.ElementAt(i);
}
Run Code Online (Sandbox Code Playgroud)

是否还有其他快速枚举(性能明智)Hashset

jod*_*ods 7

如果重要,您应该进行基准测试并亲自了解您的方案中更快的解决方案.

在这种情况下,第二个解决方案几乎可以保证较慢,因为ElementAt是一个Enumerable扩展方法.它有一个IList <T>的优化路径,HashSet <T>没有实现.因此它需要从您的IEnumerable <T>枚举N个元素的"正常"路径.

您可以自己弄清楚您的第二个解决方案具有O(N ^ 2)复杂度,而第一个解决方案肯定是O(N).

HashSet还有其他快速枚举吗?不,我不这么认为.这就是IEnumerable的用途.但这对你来说不够快吗?微基准测试是没用的,如果您的性能受到此限制,我会担心.