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

时间:2013-09-25 12:22:09

标签: c# linq permutation

我一直在寻找一种方法,以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
          };

1 个答案:

答案 0 :(得分:1)

您正在添加所有内容,然后删除重复内容。你不需要,看看关于排列的这个(我的)答案:https://stackoverflow.com/a/9315076/360211

应用于您的方案,您有一个3位数字(maxDigits = 3),其中base = Samples.Count()

如果你的代码已经有效,那么这种方法的优点只与性能有关。