Как найти все возможные комбинации строк в двух строковых массивах разных размеров - PullRequest
0 голосов
/ 24 января 2019

Я столкнулся с особой проблемой, которую я не смог найти решения после долгих поисков.Вот мой вопрос:

У меня есть два массива строк:

   var arr1 = new[] { "UserId", "BookId", "BookStoreId", "Appid" };
   var arr2 = new[] {"Same", "Unique", "Repetitive"};

Я хочу Result со всеми возможными комбинациями, такими как:

Result (должен быть в табличном формате):

Столбцы - UserId BookId BookStoreId Appid

  • Row1 То же самое То же самое
  • Row2 То же самое То же самое То же уникальное
  • Row3 То же самое то же самоеПовторяющиеся

  • Row4 То же самое Уникальное То же самое

  • Row5 То же самое То же самое Повторение же

  • ROW6 То же самоеУникальный Уникальный

  • Row6 Тот же самый Уникальный Повторяющийся
  • Row7 Тот же Тот же Повторный Уникальный
  • Row8 Тот же Самый Повторяющийся

  • Row9 То же уникальное То же самое

  • Row10 То же уникальное уникальное То же
  • Row11 То же повторяющееся То же самое и так далее ...

Ряды иСтолбцы предназначены только для обозначения.

Я надеюсь, что мой вопрос теперь ясен.

Я должен создать 64 уникальных комбинации.

Я пробовал множество способов, включая декартовы произведения, но это не решило мою проблему.

1 Ответ

0 голосов
/ 24 января 2019

Кажется, вам нужны комбинации с повторениями. Проверьте этот ответ https://stackoverflow.com/a/25824818/1007620

Резюме:

static IEnumerable<String> CombinationsWithRepition(IEnumerable<string> input, int length)
{
    if (length <= 0)
        yield return "";
    else
    {
        foreach(var i in input)
            foreach(var c in CombinationsWithRepition(input, length-1))
                yield return i + ',' + c;
    }
}

Тогда

string[] items = {"UserId", "BookId", "BookStoreId", "Appid", "Same", "Unique", "Repetitive"};
foreach (var c in CombinationsWithRepition(items, 4))
    Console.WriteLine (c);

Результат https://pastebin.com/2hCbA1XJ

...