Я пытаюсь сделать функцию перестановок IEnumerable (с повторением) на C#. У меня уже есть функция, которая использует Массивы;Перестановки с повторением с IEnumerable на основе целых чисел
public IEnumerable<IEnumerable<T>> GetPermsWithReps<T>(IEnumerable<T> items, int count)
{
foreach (var item in items)
{
if (count == 1)
{
yield return new T[] { item };
}
else
{
foreach (var result in GetPermsWithReps(items, count - 1))
{
yield return new T[] { item }.Concat(result);
}
}
}
}
И он работает довольно хорошо ... но Теперь мне нужно сделать IEnumerable функцию, которая будет работать прямо на целых числах, а не массив. Так, например, если я это называю;
GetPermsInts(max_val = 1, digits_num = 2)
Я должен получить выход;
00
01
10
11
Я пытался изменить эту функцию на многих способов добиться этого, но не везло до сих пор ... Пожалуйста может кто-нибудь мне помочь?
Итак, вам нужно выяснить, как с учетом значения создать последовательность всех возможных значений между нулем и этим числом. Вы можете просмотреть существующие методы LINQ, чтобы увидеть, есть ли метод, который делает это (подсказка: есть метод, который делает именно это), или вы можете написать свой собственный; это не ужасно сложная функция для записи. – Servy
@Servy На самом деле, я могу написать функцию, которая сбрасывает все возможные значения - НО проблема в том, что я не хочу их всех, я просто хочу, чтобы каждая запись была отдельно и остановлена, когда 3 из этих записей соответствуют некоторому условию - поэтому я использую IEnumerable (потому что я могу проверять запись после каждого цикла) и больше не хочу использовать массив в качестве базового параметра (потому что тогда мне придется сначала сбрасывать все возможные цифры в массив, что потеря времени и памяти). У Вас есть какие-либо идеи ? – LOLOLOLO
Создание последовательности с '0' и' 1' в ней, когда вы собираетесь создать последовательность, содержащую все перестановки этой последовательности с самим собой, не дорого. Вы выполняете операцию с 'n!' Сложностью; создание входной последовательности размера 'n' никогда не будет значительным в сравнении. – Servy