这个问题实际上与这个帖子 https://stackoverflow.com/questions/1471558/all-possible-combinations-of-elements,只是我正在寻找 VB.NET (.NET 4) 解决方案。我已经花了很长时间试图想出一个通用的解决方案来解决这个“电源组”问题。
Given:
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)
使用现有的顺序并添加第四个选择以澄清每组内的排序要求。