我的数据集如下:
{A, 1},
{A, 2},
{B, 2},
{B, 3},
{C, 4},
{C, 5},
{D, 1},
{D, 3}
希望编写一个c#代码来生成该数据集的所有唯一组合,使每个组合都有一次a、B、c和D。
预期结果:
Combination 1 : {A, 1},{B, 2},{C, 4},{D, 1}
Combination 2: {A, 2},{B, 2},{C, 4},{D, 1}
Combination 3 : {A, 2},{B, 3},{C, 4},{D, 1}
....
...
..
*so on..*
以下是基于Eric Lippert的博客文章的答案
var input = new List<(char Letter, int Number)>
{
('A', 1),
('A', 2),
('B', 2),
('B', 3),
('C', 4),
('C', 5),
('D', 1),
('D', 3),
};
var output = input.GroupBy(x => x.Letter)
.Aggregate(
Enumerable.Repeat(Enumerable.Empty<(char, int)>(), 1),
(acc, seq) =>
from accseq in acc
from item in seq
select accseq.Concat(new[] { item}));
foreach(var seq in output)
{
Console.WriteLine(string.Join(";", seq));
}
哪个产生
(A, 1);(B, 2);(C, 4);(D, 1)
(A, 1);(B, 2);(C, 4);(D, 3)
(A, 1);(B, 2);(C, 5);(D, 1)
(A, 1);(B, 2);(C, 5);(D, 3)
(A, 1);(B, 3);(C, 4);(D, 1)
(A, 1);(B, 3);(C, 4);(D, 3)
(A, 1);(B, 3);(C, 5);(D, 1)
(A, 1);(B, 3);(C, 5);(D, 3)
(A, 2);(B, 2);(C, 4);(D, 1)
(A, 2);(B, 2);(C, 4);(D, 3)
(A, 2);(B, 2);(C, 5);(D, 1)
(A, 2);(B, 2);(C, 5);(D, 3)
(A, 2);(B, 3);(C, 4);(D, 1)
(A, 2);(B, 3);(C, 4);(D, 3)
(A, 2);(B, 3);(C, 5);(D, 1)
(A, 2);(B, 3);(C, 5);(D, 3)