列表的唯一排列(为什么这不起作用)
本文关键字:不起作用 为什么 唯一 排列 列表 | 更新日期: 2023-09-27 18:32:40
我一直在寻找一种方法来按 3 组获取列表的所有唯一排列。我找到了很多要下载的源代码和复杂的算法。
我终于想出了自己的代码,似乎有效。有人可以告诉我为什么以下内容不是一个好主意。我假设由于我找到的所有复杂解决方案而忽略了一些东西,而我的似乎太简单了。
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
};
您正在添加所有内容,然后删除重复项。你不需要,看看这个(我的)关于排列的答案:https://stackoverflow.com/a/9315076/360211
应用于您的方案,您有一个 3 位数字 ( maxDigits = 3
),其中 base = Samples.Count()
如果您的代码已经工作,那么此方法的优点仅与性能相关。