gpt4 book ai didi

c# - OrderBy/ThenBy 循环 - C# 中的嵌套列表

转载 作者:可可西里 更新时间:2023-11-01 07:53:13 25 4
gpt4 key购买 nike

我有一个嵌套列表,

List<List<String>> intable;

我想对所有列进行排序的位置。问题是列数取决于用户输入。

像这样对列表进行排序效果很好(假设此示例有 4 列)

var tmp = intable.OrderBy(x => x[0]);
tmp = tmp.ThenBy(x => x[1]);
tmp = tmp.ThenBy(x => x[2]);
tmp = tmp.ThenBy(x => x[3]);
intable = tmp.ToList();

但是,当我把它放在一个循环中时,像这样:

var tmp = intable.OrderBy(x => x[0]);
for (int i = 1; i <= 3; i++)
{
tmp = tmp.ThenBy(x => x[i]);
}
intable = tmp.ToList();

它不再正常工作,只对第四列进行排序。

最佳答案

这是访问修改后的闭包的情况。将代码更改为此,它将起作用:

var tmp = intable.OrderBy(x => x[0]);
for (int i = 1; i <= 3; i++) {
var thisI = i;
tmp = tmp.ThenBy(x => x[thisI]);
}
intable = tmp.ToList();

Eric Lippert 写了一篇 two-part article描述问题。它不能按预期工作的原因是 - 简而言之 - 因为 LINQ 仅在调用 ToList() 时评估它时使用 i 的最后一个值.这就像你写的一样:

var tmp = intable.OrderBy(x => x[0]);
tmp = tmp.ThenBy(x => x[3]);
tmp = tmp.ThenBy(x => x[3]);
tmp = tmp.ThenBy(x => x[3]);
intable = tmp.ToList();

关于c# - OrderBy/ThenBy 循环 - C# 中的嵌套列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9038007/

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