使用LINQ选择单个列表的所有唯一组合,无重复
我有一个数字列表,我需要使用LINQ查询来创建列表中所有可能的数字组合,而不需要重复。 因此,例如,如果我有{ 1, 2, 3 }
中,所述组合将是1-2
, 1-3
,和2-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 };
链接地址: http://www.djcxy.com/p/22913.html
上一篇: Select all unique combinations of a single list, with no repeats, using LINQ