Создание коллекции для последующей обработки - 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();
}
}