Работа в массивом

270
28 марта 2017, 10:21

Дан такой массив: как мне избавится от 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);
                        }
                    }
                }
            }
        }
Answer 1

Вам нужно по сути декартово произведение множества на себя. Как это сделать, описано, например, в блоге Эрика Липперта.

Воспользуемся вспомогательным классом оттуда:

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).

Answer 2
    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

READ ALSO
Как обновить DataGrid.ItemsSource без фризов (C# WPF .NET 4.5)?

Как обновить DataGrid.ItemsSource без фризов (C# WPF .NET 4.5)?

Приветствую всех, увы попытки найти 'велосипеды' в гугле закончились безрезультатноПроблема такова:

431
Переключение страниц в wpf по архитектуре mvvm

Переключение страниц в wpf по архитектуре mvvm

Всем доброго времени сутокМоя проблема заключается в следующем, как реализовать в WPF переключение между страницами используя MVVM

470
Как сделать замену частей страницы с помощью razor?

Как сделать замену частей страницы с помощью razor?

Как сделать замену(и добавление) частей страницы с помощью razor?

346