我有
List<List<string>> AllSimilarWordsLists { get; set; }
我想从这些单词生成字符串,这样就不会有重复的字符串,这里重复意味着每个字符串必须包含唯一的单词
例如,如果一旦生成'你好吗'那么'你是如何'不应该在结果中考虑'。
我可以有任意数量的列表
e.g
List1 List2 List3 List4 List5
word11 word21 word21 word21 word51
word12 word22 word22 word22 word52
word13 word23 word23 word23 word53
word14 word24 word24 word24 word54
word15 word25 word25 word25 word55
这些列表将添加到AllSimilarWordsLists中。我想使用笛卡尔积生成字符串列表。找到this但是这个解决方案有固定数量的列表,任何有想法的人。
答案 0 :(得分:9)
不幸的是,我不记得我找到它的地方
public static IEnumerable<IEnumerable<T>> CartesianProduct<T>
(this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct =
new[] { Enumerable.Empty<T>() };
IEnumerable<IEnumerable<T>> result = emptyProduct;
foreach (IEnumerable<T> sequence in sequences)
{
result = from accseq in result from item in sequence select accseq.Concat(new[] {item});
}
return result;
}