2010-04-13 68 views
4

來枚舉兩個IEnumerables的所有排列我可以使用循環來做到這一點,但是有沒有辦法使用兩個IEnumerables,枚舉所有可能的排列並選擇一個包含排列的對象?我覺得這個「應該」是可能的,但我不確定要使用什麼操作符。是否有可能使用linq

感謝 詹姆斯

回答

8

你說什麼基本上是一個笛卡爾加入?你可以做類似

var query = from item1 in enumerable1 
      from item2 in enumerable2 
      select new { Item1 = item1, Item2 = item2 } 
+0

這可能是去獲得所有排列方式 - 只要記住它是O(N * M)。然而,如果你只需要一個單一的排列(比如隨機排列),你最好使用每個列表上的'ElementAt()'和一個隨機索引來產生排列。 – LBushkin 2010-04-13 13:12:00

5

Anthony's answer是正確的。擴展方法相當於是:

var query = enumerable1.SelectMany(
       x => enumerable2, 
       (item1, item2) => new { Item1 = item1, Item2 = item2 } 
      ); 

var query = enumerable1.SelectMany(
       item1 => enumerable2.Select(item2 => 
        new { Item1 = item1, Item2 = item2 }); 
      );