Этот вопрос практически совпадает с этой публикацией SO , только я ищу решение VB.NET (.NET 4). Я крутил свои колеса достаточно долго, пытаясь найти общее решение для решения этой проблемы с «набором мощности».
Дано:
Dim choices As IEnumerable(Of String) = {"Coffee", "Tea", "Milk", "Cookies"}
Dim choiceSets = choices.CombineAll()
Я ищу choiceSets
, чтобы быть IEnumerable(Of IEnumerable(Of T))
, чтобы я мог сделать что-то вроде:
For each choiceSet in choiceSets
Console.WriteLine(String.Join(", ", choiceSet))
Next
И получите результаты, которые выглядят так:
Coffee
Tea
Milk
Cookies
Coffee, Tea
Coffee, Milk
Coffee, Cookies
Tea, Milk
Tea, Cookies
Milk, Cookies
Coffee, Tea, Milk
Coffee, Tea, Cookies
Coffee, Milk, Cookies
Tea, Milk, Cookies
Coffee, Tea, Milk, Cookies
Как видите, это каждая неповторяющаяся комбинация из источника IEnumerable(Of T)
(в которой может быть от 1 до многих элементов - в этом примере всего 4), она работает на основе порядок элементов в источнике IEnumerable(Of T)
, и каждый элемент в списке>> = предыдущий элемент с точки зрения количества элементов во внутреннем IEnumerable(Of T)
.
Для чего это стоит, это не домашняя работа; хотя это действительно так.
РЕДАКТИРОВАТЬ: обновил пример, чтобы он не выглядел так, как будто результаты отсортированы по алфавиту, чтобы подчеркнуть, что используется существующий порядок источника IEnumerable(Of T)
, и добавлен 4-й выбор, чтобы прояснить требование сортировки в каждом наборе.