列表的唯一排列(为什么不起作用)?

用户名

我一直在寻找一种方法,可以按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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章