我正在实施Apriori算法。我需要计算一个列表的组合 例如,我有一个包含的列表 ABC DEF GHI JKL 它的出局应该是这样的 ABCDEF ABCGHI ABCJKL
请告诉我,我可以得到这样的输出.....
答案 0 :(得分:6)
简单方法
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();
同样轻松