У меня есть набор продуктов, которые должны быть запланированы. Есть P продуктов, каждый из которых индексируется от 1 до P. Каждый продукт может быть запланирован на период времени от 0 до T. Мне нужно построить все перестановки графиков продуктов, которые удовлетворяют следующему ограничению:
If p1.Index > p2.Index then p1.Schedule >= p2.Schedule.
Я пытаюсь построить итератор. Я знаю, как это сделать через LINQ, когда количество продуктов является известной константой, но я не уверен, как сгенерировать этот запрос, когда количество продуктов является входным параметром.
В идеале я хотел бы использовать синтаксис yield для построения этого итератора.
public class PotentialSchedule()
{
public PotentialSchedule(int[] schedulePermutation)
{
_schedulePermutation = schedulePermutation;
}
private readonly int[] _schedulePermutation;
}
private int _numberProducts = ...;
public IEnumerator<PotentialSchedule> GetEnumerator()
{
int[] permutation = new int[_numberProducts];
//Generate all permutation combinations here -- how?
yield return new PotentialSchedule(permutation);
}
EDIT: пример, когда _numberProducts = 2
public IEnumerable<PotentialSchedule> GetEnumerator()
{
var query = from p1 in Enumerable.Range(0,T)
from p2 in Enumerable.Range(p2,T)
select new { P1 = p1, P2 = p2};
foreach (var result in query)
yield return new PotentialSchedule(new int[] { result.P1, result.P2 });
}