我一直在寻找一种方法,可以按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
};
您要添加全部,然后删除重复项。您不需要,请参阅以下关于排列的(my)答案:https : //stackoverflow.com/a/9315076/360211
适用于您的方案,您有一个3位数的数字(maxDigits = 3
),其中base = Samples.Count()
如果您的代码已经可以使用,则此方法的优势仅与性能相关。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句