Метод расширения C# генерирует массив комбинацийC#

Место общения программистов C#
Ответить
Anonymous
 Метод расширения C# генерирует массив комбинаций

Сообщение Anonymous »

Предполагая, что существует список учителей и учеников, определенный в приведенной ниже последовательности.
  • Учитель
  • Ученик
  • Студент
  • Студент
  • Учитель
  • Студент
    Учитель
Учитель может обучать себя и других учеников раньше, чем следующий учитель. Пример: №7 не может обучать №4 из-за этого правила. Все предметы в списке/последовательности необходимо обучать только один раз в наборе. Учитель не может учить другого учителя. Также существует правило порядка: учитель не может выбрать для обучения любого случайного ученика не по порядку. #1 преподавание только 2,4, но не 3 противоречит правилам.
Ожидаемый результат приведен ниже. Первый элемент в выводе следует читать так: #1 учит 1,2,3,4, #5 учит 5,6 и #7 учит 7. Второй элемент говорит, что #1 учит 1,2,3,4 и #5. учит 5, а №7 учит 6, 7.

Код: Выделить всё

[
{ 1:1,2,3,4; 5:5,6      ; 7:7   },
{ 1:1,2,3,4; 5:5        ; 7:6,7 },
{ 1:1,2    ; 5:3,4,5,6  ; 7:7   },
{ 1:1,2    ; 5:3,4,5    ; 7:6,7 },
{ 1:1,2,3  ; 5:4,5,6    ; 7:7   },
{ 1:1,2,3  ; 5:4,5      ; 7:6,7 },
{ 1:1      ; 5:2,3,4,5,6; 7:7   },
{ 1:1      ; 5:2,3,4,5  ; 7:6,7 }
]
Я не думаю, что декартово произведение здесь поможет.

Код: Выделить всё

var items = teachers.SelectMany(x => students.Where(p => p.Sequence < x.Sequence ), (x, y) => new { TeacherSequence  = x.Sequence , StudentSequence  = y.Sequence })
Есть идеи?

Подробнее здесь: https://stackoverflow.com/questions/787 ... mbinations
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «C#»