我有6个必须组合的项目,
列出的项目:(这是一个例子)
所以“鹿”有两个子项目。
这些项目都列在如下列表中:
猿牛(鹿,小鹿,大鹿)
因此,您可以看到哪个项目有更多的项目。
我想要的是所有这些组合:
(有时多于6项,有时较少。
有人能帮我吗?
编辑:
有时列表也是这样的:
(因此更多有分项的项目)
发布于 2011-10-21 21:03:29
下面是VB 2010的递归解决方案(当有很多组合时,性能可能不是很好,但这是一个开始):
Function GetCombinations(items As String()(), Optional index As Integer = 0) As List(Of String())
Dim combinations As New List(Of String())
Dim lastIndex = items.Count - 1
Select Case index
Case Is < 0, Is > lastIndex
Throw New ArgumentException("index should be 0 or greater")
Case lastIndex
For Each item In items(index)
combinations.Add({item})
Next
Case Else
Dim nextCombinations = GetCombinations(items, index + 1)
For Each item In items(index)
For Each nextCombination In nextCombinations
combinations.Add({item}.Concat(nextCombination).ToArray)
Next
Next
End Select
Return combinations
End Function测试代码:
Dim items = {({"Ape"}), ({"Cow"}), ({"Deer", "Small deer", "Big deer"}), ({"Sheep"}), ({"Mouse", "Black Mouse", "White mouse"})}
For Each combination In GetCombinations(items)
Console.WriteLine(String.Join(", ", combination))
Next测试产出:
Ape, Cow, Deer, Sheep, Mouse
Ape, Cow, Deer, Sheep, Black Mouse
Ape, Cow, Deer, Sheep, White mouse
Ape, Cow, Small deer, Sheep, Mouse
Ape, Cow, Small deer, Sheep, Black Mouse
Ape, Cow, Small deer, Sheep, White mouse
Ape, Cow, Big deer, Sheep, Mouse
Ape, Cow, Big deer, Sheep, Black Mouse
Ape, Cow, Big deer, Sheep, White mouse发布于 2011-10-21 19:20:08
您将需要我的解决方案的一个变体,我在在这个解决方案中中给出了类似的问题。也许这就足够让你和睦相处了?
也许你不被允许看到答案,所以我在这里复制它。有人想要1和2的所有组合与长度3串联。
Dim HighestValue As Integer = 2 ' max value
Dim NrOfValues As Integer = 3 ' nr of values in one result
Dim Values(NrOfValues) As Integer
Dim i As Integer
For i = 0 To NrOfValues - 1
Values(i) = 1
Next
Values(NrOfValues - 1) = 0 ' to generate first as ALL 1
For i = 1 To HighestValue ^ NrOfValues
Values(NrOfValues - 1) += 1
For j As Integer = NrOfValues - 1 To 0 Step -1
If Values(j) > HighestValue Then
Values(j) = 1
Values(j - 1) += 1
End If
Next
Dim Result As String = ""
For j As Integer = 0 To NrOfValues - 1
Result = Result & CStr(Values(j))
Next
Debug.WriteLine(Result)
Next您需要将数组值按1、2等索引,而不是数字本身,并为每个子列表创建类似的操作。
发布于 2011-10-21 19:27:38
我不能对@Martin提供的方法发表评论,因为我不是专家交换的成员,但是下面是我如何处理这个问题的方法。
你想要一个IEnumerable (of IEnumerable (of T))
当你有"Ape“时,你需要把它看作{Ape}。这就是你的清单:
{阿佩},{牛},{鹿,小鹿,大鹿},{绵羊}
从这里开始,通过分组外部列表并遍历内部列表来构建组合。
也就是说,第一项{Ape}只有一个元素,所以您只会对该元素进行一次迭代。{Cow}也是这样,但是第三只和所有的鹿都会被迭代3次。
这应该足以让你开始工作了。
https://stackoverflow.com/questions/7853653
复制相似问题