【发布时间】:2012-04-17 11:44:25
【问题描述】:
我正在做一个项目,我需要找到一个数组的所有可能排列。
在一定程度上我有这个工作
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
- 虚拟机
- 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 的大纲是相同的。我需要代码来理解这一点。
这就是我要找的,而不是如何让它能够处理未知数量的组合。
谢谢
【问题讨论】:
-
看看这个涵盖许多排列和组合要求的项目:codeproject.com/Articles/26050/…
-
您的代码没有任何意义。因为
e,f,g,h,我不会编译,即使它编译了,它也不会工作,因为你超出了数组的范围。 -
@svick 感谢您指出这一点,我从一个更大的工作示例中复制并粘贴了它,现在代码是正确的
标签: c# arrays linq multidimensional-array