找到列表的组合

时间:2011-04-24 12:19:06

标签: c# asp.net

我正在实施Apriori算法。我需要计算一个列表的组合 例如,我有一个包含的列表 ABC DEF GHI JKL 它的出局应该是这样的 ABCDEF ABCGHI ABCJKL

请告诉我,我可以得到这样的输出.....

1 个答案:

答案 0 :(得分:6)

它被称为cartesian product

简单方法

var inputs = new [] { "ABC", "DEF", "GHI", "JKL", "MNO" };
var combi = from first in inputs
            from second in inputs
            select first+second;

灵活的方法(由Eric Lippert发布)

static IEnumerable<IEnumerable<T>> CartesianProduct<T>(this IEnumerable<IEnumerable<T>> sequences) 
{ 
  IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() }; 
  return sequences.Aggregate( 
    emptyProduct, 
    (accumulator, sequence) =>  
      from accseq in accumulator  
      from item in sequence  
      select accseq.Concat(new[] {item}));                
}

一样使用它
var combi = new [] { inputs, inputs }.CartesianProduct();

能力来自

var combi = new [] { inputs, inputs, somethingelse, inputs }.CartesianProduct();

同样轻松