Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从对象列表中获取n元素的不同元组的所有组合?_C#_Algorithm_Permutation - Fatal编程技术网

C# 如何从对象列表中获取n元素的不同元组的所有组合?

C# 如何从对象列表中获取n元素的不同元组的所有组合?,c#,algorithm,permutation,C#,Algorithm,Permutation,我有一个N个玩家的列表(比如说,14个玩家-示例中的1到14个数字) 我想获得一个由X个玩家组成的所有可能的Y队元组的集合当然,可能会有球员被排除在外 输入示例:N=14名球员,Y=3支球队,每个球队由X=3名球员组成。 这意味着14名球员,分成3支队伍,每组3名球员。我想要所有的可能性 1) [123],[456],[789]10,11,12,13,14被遗漏 2) [456],[789],[10,11,12]1,2,3,13,14被遗漏。 3) 我已经看过了这篇文章,它帮助我获得了所有可能

我有一个N个玩家的列表(比如说,14个玩家-示例中的1到14个数字)

我想获得一个由X个玩家组成的所有可能的Y队元组的集合当然,可能会有球员被排除在外

输入示例:N=14名球员,Y=3支球队,每个球队由X=3名球员组成。 这意味着14名球员,分成3支队伍,每组3名球员。我想要所有的可能性

1) [123],[456],[789]10,11,12,13,14被遗漏

2) [456],[789],[10,11,12]1,2,3,13,14被遗漏。 3)

我已经看过了这篇文章,它帮助我获得了所有可能的X队球员,我认为这可能有助于我实现我的目标: 现在我有了所有可能的X人团队,我需要更进一步。当我拥有所有可能的团队元组时,我将选择最适合我需要的组合对它们进行排序。你们能帮帮我吗?
C代码很好,但即使是伪代码也能帮上忙。

我想你需要的是组合,而不是置换。排列意味着玩家的顺序很重要

使用扩展方法可以生成以下组合:

public static IEnumerable<IEnumerable<T>> Combinations<T>(this IEnumerable<T> elements, int k) {
    return k == 0 ? new[] { new T[0] } :
      elements.SelectMany((e, i) =>
        elements.Skip(i + 1).Combinations(k - 1).Select(c => (new[] { e }).Concat(c)));
}
首先,您可以生成所有玩家:

var players = Enumerable.Range(1, N);
然后,您可以通过一次组合玩家
NumPlayersPerTeam
获得所有可能的团队:

var AllTeams = players.Combinations(NumPlayersPerTeam);
var PossibleTeamSets = AllTeams.Combinations(NumTeams);
然后您可以通过一次组合团队
NumTeams
,获得所有团队集:

var AllTeams = players.Combinations(NumPlayersPerTeam);
var PossibleTeamSets = AllTeams.Combinations(NumTeams);

我不清楚你在寻求什么帮助。如果您提供了一些代码,并指出了您需要的确切结果。请注意,您的示例问题有7971964个可能的团队集。@JohnWu我尽可能地把它写得更好,恐怕我的英语不是一流的。但是我已经得到了我需要的答案,所以没关系@约翰:我觉得很清楚。这些天有太多的问题因为不清楚而被关闭。这正是我所需要的,很高兴你马上明白了。你的建议既正确又优雅,但也很简单,读完后我觉得有点愚蠢。非常感谢,这真的很有帮助。