gpt4 book ai didi

c# - 使用 LINQ 选择单个列表的所有唯一组合,不重复

转载 作者:可可西里 更新时间:2023-11-01 08:03:20 27 4
gpt4 key购买 nike

我有一个数字列表,我需要使用 LINQ 查询创建列表中所有可能的唯一数字组合,不重复。因此,例如,如果我有 { 1, 2, 3 },则组合将是 1-21-32-3.

我目前使用两个 for 循环,如下所示:

for (int i = 0; i < slotIds.Count; i++)
{
for (int j = i + 1; j < slotIds.Count; j++)
{
ExpressionInfo info1 = _expressions[i];
ExpressionInfo info2 = _expressions[j];

// etc...
}
}

是否可以将这两个 for 循环转换为 LINQ?

谢谢。

最佳答案

当然 - 您可以在对 SelectMany 的单个调用中通过对 Skip 的嵌入式调用来完成此操作:

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

这是一个替代选项,它完全不使用 SelectMany 这样深奥的重载:

var query = from pair in slotIds.Select((value, index) => new { value, index })
from second in slotIds.Skip(pair.index + 1)
select new { first = pair.value, second };

它们基本上做同样的事情,只是方式略有不同。

这是另一个更接近您的原始选项的选项:

var query = from index in Enumerable.Range(0, slotIds.Count)
let first = slotIds[index] // Or use ElementAt
from second in slotIds.Skip(index + 1)
select new { first, second };

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

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