我正在开发一个项目,我需要找到一个数组的所有可能的排列组合。阵列中的数组排列
我有这个工作,到一个点
var geneticsArray = new[] { new[] { "M", "V" }, new[] { "M", "V" }};
var perms = from a in geneticsArray[0]
from b in geneticsArray[1]
select new { a, b };
这给我看所有的选项:
- MM
- VM
- MV
- VV
这是正确的,但它不是我想达到的目的,因为我的意图和目的VM和MV是一样的。
如何获得转换MV到VM?
这个例子非常简单,只包含2个分组,有可能的无限分组,这是我稍后会处理的事情,但只是想让你知道,所以答复不是简单地反转结果。
任何帮助,这将是伟大的。
进一步编辑
用下面的代码,我可以看到每个排列的计数:
var permCounts = from perm in perms group perm by perm into b select new { b.Key, Count = b.Count() };
这将告诉我的每一个上述提到的选项出现一次,这是不完全正确,如上所述,MV和MV在这种情况下是相同的。我需要代码来理解这一点。
这是我正在寻找,而不是如何使它能够处理未知数量的组合。
感谢
看一看这个项目,该项目涵盖了许多permutation-和组合的要求:http://www.codeproject.com/Articles/26050/Permutations-Combinations-and-Variations-using-CG – 2012-04-17 11:53:53
您的代码没有按没有任何意义。我不会编译,因为'e,f,g,h',即使它编译了,它也不会工作,因为你超出了数组的界限。 – svick 2012-04-17 12:04:30
@svick谢谢你指出,我从一个更大的工作示例复制并粘贴它,代码现在是正确的 – JamesStuddart 2012-04-17 12:09:55