2014-09-03 100 views
3

的n個我要生成從這些文字字符串,沒有字符串被複制並在這裏複製意味着每個字符串必須包含唯一的話笛卡爾產品列表

例如,如果一旦產生「你好嗎」,那麼「你是如何'不應該被考慮在結果中'。

我可以有任意數量的名單

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

這麼一句話可以出現在多個列表,每個生成的字符串必須包含每個列表的東西嗎? – Chris 2014-09-03 11:44:24

+0

是的,你的權利@chris – 2014-09-03 11:49:31

回答

8

不幸的是,我不記得在那裏我發現它

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; 
} 
+0

源可能是http://blogs.msdn.com/b/ericlippert/archive/2010/06/28/computing-a-cartesian-product-with-linq.aspx - 不完全相同但非常接近。 – Chris 2014-09-03 11:45:30

+0

是的,我認爲,你是對的。埃裏克Lippert是非常值得信賴的來源使用 – Vladmir 2014-09-03 12:57:05

+0

這是不工作任何想法? – MonsterMMORPG 2016-04-10 13:58:16