2010-04-13 1 views
4

Я мог бы сделать это с помощью циклов, но есть ли способ взять два IEnumerables, перечислить все возможные перестановки и выбрать объект, содержащий перестановку? Я чувствую, что это «должно быть», но я не уверен, какие операторы использовать.Можно ли перечислить все перестановки двух IEnumerables, используя linq

Благодаря Джеймс

ответ

8

Вы говорите о том, что в основном декартово присоединиться? Вы можете сделать что-то вроде

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

Это, вероятно, путь, чтобы получить все перестановки - просто имейте в виду, что это O (Н * м). Однако, если вы хотите только одну перестановку (скажем, случайную), вам лучше использовать 'ElementAt()' в каждом списке со случайным индексом для создания этих перестановок. – LBushkin

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 }); 
      ); 

 Смежные вопросы

  • Нет связанных вопросов^_^