使用LINQ选择单个列表的所有唯一组合,不重复
我有一个数字列表,我需要使用LINQ查询创建列表中数字的每个可能的唯一组合,而不重复。 因此,例如,如果我有{ 1, 2, 3 }
,则组合将是1-2
和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?
谢谢。
当然 – 您可以通过嵌入式调用Skip
在SelectMany
的单个调用中执行此操作:
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 };