用于从数据集生成组合结果的C#代码



我的数据集如下:

{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)

最新更新