最小化列表中的组合行[[

问题描述 投票:1回答:3
我有一个List<int>List<List<int>>)的列表。该列表由比赛中开始编号的游戏赌注组成。假设我在第一场比赛中选择了三个选项,然后在其余6场比赛中选择了一个选项。这总计多达三个投注组合。

三个唯一行(下注)的List<List<int>>看起来像这样:

[0] 1 [0] 2 [0] 3 [1] 1 [1] 1 [1] 1 [2] 1 [2] 1 [2] 1 [3] 1 [3] 1 [3] 1 [4] 1 [4] 1 [4] 1 [5] 1 [5] 1 [5] 1 [6] 1 [6] 1 [6] 1

[我提交赌注时,我想将单个赌注分组为较小的分组赌注(可能是List<List<string>>?),这些赌注在数学上代表上述列表,因此根据上述示例:

[0] "1,2,3" [1] "1" [2] "1" [3] "1" [4] "1" [5] "1" [6] "1"

我发现了与笛卡尔积相关的类似解决方案。但是似乎没有一个适合这个问题。有什么想法吗?

我发现了这个Reverse Cartesian Product,它描述了我的问题,但是我无法真正将这个答案从Java转换为c#。

编辑:只是为了澄清评论中的问题,每个投注始终由7场比赛组成,因此,如果我在2-7场比赛中选择#1投注,然后在第一场比赛中对#1,#2,#3投注。我的函数使用.Count == 7创建List的三行。我只是试图说明列表的内容。在c#中,可以这样创建一个新列表:

List<List<int>> list = new List<List<int>> { new List<int> { 1, 1, 1, 1, 1, 1, 1 }, new List<int> { 2, 1, 1, 1, 1, 1, 1 }, new List<int> { 3, 1, 1, 1, 1, 1, 1 } };

c# cartesian-product
3个回答
1
投票
似乎您想删除每行上重复的int值(=顶部列表的项目),但是即使行彼此重复也要保留行本身。

0
投票
代替0,1,2,3,4,5,...您可以使用1,2,4,8,16,...这样,您可以使用按位或运算符组合下注(或简单地总结一下):

0
投票
您似乎想要的可以通过LINQ完成:
© www.soinside.com 2019 - 2024. All rights reserved.