【发布时间】:2013-09-25 12:22:09
【问题描述】:
我一直在寻找一种方法来按 3 组获取 List 的所有唯一排列。我发现了很多要下载的源代码和复杂的算法。
我终于想出了我自己的似乎可以工作的代码。有人可以告诉我为什么以下不是一个好主意。我假设由于我找到的所有复杂解决方案而我的解决方案似乎太简单了,所以我必须忽略某些东西。
var combinations = from a in Samples
from b in Samples
from c in Samples
where (string)a.sample != (string)b.sample
&& (string)a.sample != (string)c.sample
&& (string)b.sample != (string)c.sample
select new Rank
{
sample = a.sample,
sampleb = b.sample,
samplec = c.sample
};
foreach (var combo in combinations)
{
string[] aut = { combo.sample, combo.sampleb, combo.samplec };
Array.Sort(aut);
combo.sample = aut[0];
combo.sampleb = aut[1];
combo.samplec = aut[2];
l.Add(combo);
}
noDupes = from n in l
group n by new { n.sample, n.sampleb, n.samplec } into g
select new Rank
{
sample = g.Key.sample,
sampleb = g.Key.sampleb,
samplec = g.Key.samplec
};
【问题讨论】:
-
我见过的第一个问题是“我的代码也是 1337 吗?”。在我看来很好。继续前进。
-
其实我想确定我没有遗漏什么。我对此很陌生。
-
现在,现在,@user2525463... Linq 允许您非常简洁地编写笛卡尔连接。您的解决方案看起来不错。显然它也有效。我只是在这里没有看到一个合适的问题。
-
这个问题似乎是题外话,因为它是关于代码审查的。在codereview.stackexchange.com 提出此类问题
-
取决于样本的大小和性能的重要性。
标签: c# linq permutation