gpt4 book ai didi

c# - 使用 LINQ(第 2 部分)选择单个列表的所有唯一组合,不重复

转载 作者:太空狗 更新时间:2023-10-29 21:35:54 26 4
gpt4 key购买 nike

John Skeets 对这个问题的回答,Select all unique combinations of a single list, with no repeats, using LINQ , 效果非常好。

但是,有人可以逐个组件地分解第一个答案的内部工作原理吗:

List<int> slotIds = new List<int> {1, 2, 3};
var query = slotIds.SelectMany((value, index) => slotIds.Skip(index + 1),
(first, second) => new { first, second });

最佳答案

它在概念上大致等同于此,尽管实际执行模型当然不同(惰性等):

for (int i = 0; i < slotIds.Count; i++)
{
int first = slotIds[i];
for (int j = i + 1; j < slotIds.Count; j++)
{
int second = slotIds[j];
results.Add(new { first, second });
}
}

SelectManyvalueindex 进行投影是一种同时使用 first 的方法>i 进行内部循环。我们需要索引以便我们可以跳过 index + 1 值,这相当于上面的 ji + 1 开始的循环代码。

这有帮助吗?如果不是,您能否指出哪一点令人困惑?

编辑:啊——我没有意识到你提到的另一个问题是从这段代码开始的!不过,我认为它仍然有用,给下面的段落提供一些东西......

如果您理解我的答案的替代(查询表达式)版本,那么第一个版本是类似的,只是使用了 SelectMany 的重载,它允许您在“外”序列。

关于c# - 使用 LINQ(第 2 部分)选择单个列表的所有唯一组合,不重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7991486/

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