gpt4 book ai didi

C# foreach 循环 - 顺序*稳定性*得到保证吗?

转载 作者:可可西里 更新时间:2023-11-01 08:05:54 29 4
gpt4 key购买 nike

假设我有一个给定的集合。在不以任何方式更改集合的情况下,我使用 foreach 循环遍历其内容两次。排除宇宙射线等等,绝对保证两个循环中的顺序一致吗?

或者,给定一个 HashSet<string>对于许多元素,什么会导致以下注释行的输出不相等:

{
var mySet = new HashSet<string>();
// Some code which populates the HashSet<string>

// Output1
printContents(mySet);

// Output2
printContents(mySet);
}

public void printContents(HashSet<string> set) {
foreach(var element in set) {
Console.WriteLine(element);
}
}

如果我能得到一个通用的答案来解释导致实现不符合上述标准的原因,那将会很有帮助。不过,具体来说,我对 Dictionary 感兴趣, List和数组。

最佳答案

数组枚举保证顺序。

ListList<T>期望提供稳定的顺序(因为它们期望实现顺序索引的元素)。

Dictionary、HashSet都是明确不保证顺序的。 2 次调用一个接一个地迭代项目将以不同顺序返回项目的可能性很小,但没有保证或期望。人们不应该期待任何特定的顺序。

Dictionary/HashSet 的排序版本按排序顺序返回项目。

其他 IEnumerable 对象可以自由地做任何他们想做的事情。通常以符合用户期望的方式实现迭代器。 IE。如果提供了明确的顺序,则对具有隐式顺序的事物的枚举应该是稳定的——预计是稳定的。查询未指定顺序的数据库应该以半随机顺序返回项目。

检查此问题以获取链接:Does the foreach loop in C# guarantee an order of evaluation?

关于C# foreach 循环 - 顺序*稳定性*得到保证吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11680347/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com