Дан такой массив: как мне избавится от foreach'ов чтобы не писать их оч много а просто указать длинну строки?
string[] masiv = { "1", "2", "3", "4", "5" };
foreach (var it1 in masiv)
{
foreach (var it2 in masiv)
{
foreach (var it3 in masiv)
{
foreach (var it4 in masiv)
{
foreach (var it5 in masiv)
{
string s = it1 + it2 + it3 + it4 + it5;
Console.WriteLine(s);
}
}
}
}
}
Вам нужно по сути декартово произведение множества на себя. Как это сделать, описано, например, в блоге Эрика Липперта.
Воспользуемся вспомогательным классом оттуда:
static class CartesianExtensions
{
public static IEnumerable<IEnumerable<T>> CartesianProduct<T>(
this IEnumerable<IEnumerable<T>> sequences)
{
IEnumerable<IEnumerable<T>> emptyProduct = new[] { Enumerable.Empty<T>() };
return sequences.Aggregate(emptyProduct, (accumulator, sequence) =>
from accseq in accumulator
from item in sequence
select accseq.Concat(new[] { item }));
}
}
Имея этот класс, задача становится тривиальной:
string[] m = { "1", "2", "3", "4", "5" };
foreach (var s in (new[] { m, m, m, m, m }).CartesianProduct())
Console.WriteLine(string.Concat(s));
Если хотите, new[] { m, m, m, m, m } можно заменить на Enumerable.Repeat(m, 5).
static IEnumerable<string> Combinations(int n)
{
if (n > 0)
{
foreach (var combination in Combinations(n - 1))
{
foreach (var e in masiv)
{
yield return e + combination;
}
}
}
else yield return "";
}
Рабочий пример: https://dotnetfiddle.net/Dkiimp
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости