這被稱爲笛卡爾產品。
例如,如果我們有兩組A和B,使得
A = {1,2}
B = {3,4}
然後笛卡爾乘積甲X B的結果等於
A x B = {(1,3),(1,4),(2,3),(2,4)}
如果現在我們要在上面得到的結果和新的一組之間做出笛卡爾乘積,例如:
N = {5,6}
結果Ca rtesian產品A X B X N,等於
A x B = {(1,3),(1,4),(2,3),(2,4)}
N = {5,6}
──────────────────────────────────────────────────
A x B x N = {(1,3,5),(1,3,6),(1,4,5),(1,4,6),(2,3,5),(2,3,6),(2,4,5),(2,4,6)}
所述第一組中的每一個元素都必須與第二組中的每個元素進行配對。
我已經開發了4個解決方案的笛卡爾乘積:
- 使用的數學模型,但沒有遞歸。此解決方案 向量使用計算每個組合數。
- 使用遞歸和Collections類。
- 使用List(Of ...)類,也用於遞歸。
這三個解決方案在我看來很難向您解釋。 此外,我很難用英語解釋我的想法,因爲我的母語是卡斯蒂利亞語。
因此,我努力創建另一個不使用遞歸的解決方案,這對任何程序員來說都更加簡單和友好。
最後,我可以創建一個滿意的解決方案。易於理解且無遞歸。 它也非常靈活。根據需要,從2開始接受任意數量的套件。 您也可以使用任意數量的項目。這取決於每個開發人員的要求。
我希望這第四。我設計的解決方案,會取悅你,尊敬的同事。
Form4中只需要一個ListBox1。這裏是:
Public Class Form4
Private Sub Form4_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load
'┌─────────── Temporary code for example ───────────┐
Dim Set_1 As List(Of String) = New List(Of String)
Dim Set_2 As List(Of String) = New List(Of String)
Dim Set_3 As List(Of String) = New List(Of String)
Set_1.Add("1")
Set_1.Add("2")
Set_2.Add("3")
Set_2.Add("4")
Set_3.Add("5")
Set_3.Add("6")
'└──────────────────────────────────────────────────┘
Dim Sets As List(Of Object) = New List(Of Object)
Sets.Add(Set_1)
Sets.Add(Set_2)
Sets.Add(Set_3)
Dim product As List(Of String) = Sets(0)
For i = 1 To Sets.Count - 1
product = CartesianProduct(product, Sets(i))
Next
For Each element As String In product
Me.ListBox1.Items.Add(element)
Next
End Sub
Private Function CartesianProduct(ByVal Set_A As List(Of String), ByVal Set_B As List(Of String)) As List(Of String)
Dim product As List(Of String) = New List(Of String)
For Each a As String In Set_A
For Each b As String In Set_B
product.Add(a & b)
Next
Next
Return product
End Function
End Class
祝您有美好的一天! :)
我發佈的算法[這裏](http://stackoverflow.com/questions/25326734/cannot-create-algorithm-for-a-sequence-in-vba/25328933#25328933)適用於那和這很容易。它比你的情況更強大(「對」可以是不同大小的集合),所以可能有一個更簡單的方法(儘管那個也很短)。 – KekuSemau 2014-10-31 16:39:50