-1 |
|
Ik heb het probleem zelf al opgelost en was gemakkelijker als ik dacht.
Dim result As New List(Of String)
Dim input As String() = New String() {"A", "B", "C", "D"}
For i As Integer = 1 To Math.Pow(2, input.Count) - 1
Dim tmp As String = Convert.ToDouble(Convert.ToString(i, 2)).ToString(StrDup(input.Count, "0"))
Dim rslt As String = ""
For j As Integer = 0 To tmp.Count - 1
If tmp(j).ToString = "1" Then
rslt &= input(j)
End If
Next
result.Add(rslt)
Next
MsgBox(String.Join(", ", result.ToArray))
Dim result As New List(Of String) Dim input As String() = New String() {"A", "B", "C", "D"} For i As Integer = 1 To Math.Pow(2, input.Count) - 1 Dim tmp As String = Convert.ToDouble(Convert.ToString(i, 2)).ToString(StrDup(input.Count, "0")) Dim rslt As String = "" For j As Integer = 0 To tmp.Count - 1 If tmp(j).ToString = "1" Then rslt &= input(j) End If Next result.Add(rslt) Next MsgBox(String.Join(", ", result.ToArray))
Korte uitleg:
input = String("A", "B", "C", "D")
Een loop van 1 tot 2 tot de macht (lengte van de input array) (16 in dit geval) - 1 = 15
tmp bevat de counter omgezet naar binair dus "0001" tot "1111"
Dan worden alle karakters van de counter doorlopen en waar deze "1" is wordt een string opgebouwd voor naar de resultset te sturen. Bijvoorbeeld :
"0001" = "A" (DCB = 0, A = 1) of "1011" = "DBA" (DBA = 1, C = 0)
edit: script wat uitgebreid, werkt nu zelfs voor 22 parameters, heb niet meer getest wat dat resulteerd al in een array met 4.194.304 keys. |