gpt4 book ai didi

c# - IEnumerable 上的延迟 OrderBy

转载 作者:行者123 更新时间:2023-11-30 21:52:51 24 4
gpt4 key购买 nike

我有这段代码,它只是根据每个整数中的数字对整数的 IEnumerable 进行排序。

var ints = new List<int>() { 66, 7, 9, -5, -22, 67, 122, -333, 555, -2 };
var ordered = ints.OrderBy(x =>
{
x = Math.Abs(x);

Console.WriteLine($"Getting length of {x}");

int len = 0;
while (x >= 1)
{
len++;
x /= 10;
}
return len;
});

Console.WriteLine("After OrderBy");
Console.WriteLine("Fetching first item in ordered sequence");
Console.WriteLine($"First item is {ordered.First()}");

Console.WriteLine(string.Join(" ", ordered));

因此,当程序在 ordered 序列中获取第一项时,IEnumerable 正在排序(我正在接收输出行 Getting lenght of XXX ) 因为 OrderBy 被推迟了,这不是很清楚。

但是为什么当程序点击 Console.WriteLine(string.Join("", ordered)); 时我又得到了这个输出? IEnumerable 是否再次排序? (不是已经排序了吗?)

最佳答案

当您将值分配给 ordered 时,它们实际上并没有被订购。它基本上是订购 list 的说明。 IOrderedEnumerable<int> .因此,每次您尝试访问第一个项目或任何其他项目时,它都会将其转换为有序列表,以便为您提供该项目。第一次运行 .First() , 第二次运行 string.Join .
在这两种情况下,程序都会创建一个有序列表的 2 个不同实例,用完它,然后通过丢失引用来处理它(因为你没有保存它)。

关于c# - IEnumerable<T> 上的延迟 OrderBy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34406880/

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