dil*_*ert 14 c# linq combinations tuples
如何获取列表中所有可能的项目对(顺序不相关)?
例如,如果我有
var list = { 1, 2, 3, 4 };
Run Code Online (Sandbox Code Playgroud)
我想得到这些元组:
var pairs = {
new Tuple(1, 2), new Tuple(1, 3), new Tuple(1, 4),
new Tuple(2, 3), new Tuple(2, 4)
new Tuple(3, 4)
}
Run Code Online (Sandbox Code Playgroud)
Jon*_*eet 24
稍微重新设计cgeers的答案是为了获得你想要的元组而不是数组:
var combinations = from item1 in list
from item2 in list
where item1 < item2
select Tuple.Create(item1, item2);
Run Code Online (Sandbox Code Playgroud)
(使用ToList或者ToArray如果你想.)
在非查询表达式形式(稍微重新排序):
var combinations = list.SelectMany(x => list, (x, y) => Tuple.Create(x, y))
.Where(tuple => tuple.Item1 < tuple.Item2);
Run Code Online (Sandbox Code Playgroud)
这两个实际上都会考虑n 2个值而不是n 2/2个值,尽管它们最终会得到正确的答案.另一种选择是:
var combinations = list.SelectMany((x, i) => list.Skip(i + 1), (x, y) => Tuple.Create(x, y));
Run Code Online (Sandbox Code Playgroud)
...但是这使用Skip可能还没有被优化.说实话,这可能无关紧要 - 我会选择最适合您使用的一个.