gpt4 book ai didi

c# - IEnumerable 和顺序

转载 作者:IT王子 更新时间:2023-10-29 03:56:27 24 4
gpt4 key购买 nike

我对 IEnumerable 中的order 有疑问。

据我所知,遍历IEnumerable是伪代码,可以写成下面的方式:

while (enumerable.HasNext())
{
object obj = enumerable.Current;
...
}

现在,假设需要对一个已排序 集合进行操作。在这种情况下可以使用 IEnumerable 还是尝试具有索引支持的其他方式(即 IList)更好?

换句话说:IEnumerable 的合约是否对一般顺序做出任何保证?

因此,IEnumerable 不是保证排序的通用接口(interface)的正确方法。新的问题是什么接口(interface)或类应该用于有顺序的不可变集合? 只读集合列表?它们都包含Add()方法(前者甚至没有实现)。

我自己的想法:IEnumerable 不提供有关排序的任何保证。正确的实现可以在不同的枚举中以不同的顺序返回相同的元素(考虑一个 SQL 查询)

我知道 LINQ First(),但是如果 IEnumerable 只字不提它的顺序,那么这个扩展就没用了。

最佳答案

IEnumerable/IEnumerable<T>不保证顺序,但使用 IEnumerable/IEnumerable<T> 的实现可能会或可能不会保证订购。

例如,如果您枚举 List<T> ,顺序是有保证的,但是如果你枚举 HashSet<T>没有提供这样的保证,但两者都将使用 IEnumerable<T> 进行枚举。界面。

关于c# - IEnumerable 和顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10409893/

24 4 0