Создание коллекции для последующей обработки - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток. Подскажите, каким образом лучше написать метод по формированию коллекции, к примеру состоящую из массива типа char, которая будет автоматически сформирована из чисел от 0 до 9 и букв к примеру латинского алфавита. Причем в данной коллекции не должно присутствовать повторяющихся значений и размерность (количество символов в одной ячейке) должна задаваться в качестве параметра. Например: 01234 01235 01236 ... 98765 Если с буквами, то: 0123 0124 ... zyxt zyxv

Решение задачи: «Создание коллекции для последующей обработки»

textual
Листинг программы
static void Main()
{
    // Простой вывод на экран (в конце false)
    foreach (char[] c in Generator.Strings("abc", 3, false))
        Console.WriteLine(c);
 
    // Создание списка
    List<char[]> strings = Generator.Strings("abc1", 2).ToList();
    foreach (char[] c in strings)
        Console.WriteLine(c);
 
    Console.ReadKey();
}
 
class Generator
{
    IEnumerable<char> Alphabet;
    char[] Return;
    bool Copy;
 
    Generator(IEnumerable<char> Alphabet,int Size, bool Copy)
    {
        this.Alphabet = Alphabet;
        this.Return = new char[Size];
        this.Copy = Copy;
    }
 
    IEnumerable<char[]> GetStrings(int Deep = 0)
    {
        if (Deep == Return.Length)
        {
            yield return Copy ? (char[])Return.Clone() : Return;
        }
        else
        {
            foreach (char c in Alphabet)
            {
                Return[Deep] = c;
                foreach (var r in GetStrings(Deep + 1))
                    yield return r;
            }
        }
    }
 
    public static IEnumerable<char[]> Strings(IEnumerable<char> Alphabet, int Size, bool Copy = true)
    {
        return new Generator(Alphabet, Size, Copy).GetStrings();
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.333 из 5
Похожие ответы