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

本文关键字:不起作用 为什么 唯一 排列 列表 | 更新日期: 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()

如果您的代码已经工作,那么此方法的优点仅与性能相关。