セットの一意の組み合わせを返す vb.net コードを作成しようとしています。私のセットには 3 つの異なる要素が含まれています。この投稿で同様の投稿を見つけましたが、この結果を得るための VB ソリューションが見つかりませんでした
例:
要素: 1、2、3
{ 1, 2, 3}
結果は
1
2
3
12
13
23
123
...........
>...................
私は、次のコードを使用してこれを達成しようとしています
Function GetCombinations(ByVal depth As Integer, ByVal values As String()) As IEnumerable(Of String)
If depth > values.Count + 1 Then Return New List(Of String)
Dim result = New List(Of String)
For i = 0 To depth - 1
For y = 0 To values.Count - 1
If i = 0 Then
result.Add(values(y))
Else
result.Add(values(i - 1) + values(y))
End If
Next
Next
Return result
End Function
結果を取得するには
Dim reslt = GetCombinations(4, data_array)
?reslt
Count = 12
(0): "1"
(1): "2"
(2): "3"
(3): "11"
(4): "12"
(5): "13"
(6): "21"
(7): "22"
(8): "23"
(9): "31"
(10): "32"
(11): "33"
ヒント: 私は数学を扱っており、組み合わせの数を計算することができます。私はこの式でアウトをテストすることができます
たとえば、nCr と呼ばれるこの式があります。n個の要素のうち、rの一意の組み合わせでr個の要素をいくつ取る方法があるかを意味します。
nPr = n!/(n-r)!
n! = 1 * 2 * 3 * 4* ... (n-1) * n
Elements: 1, 2, 3
In this case n = 3 and r can be 1, 2, and 3 all
number of combinations = 3P1 + 3P2 + 3P3
= 3!/2! + 3!/1! + 3!/0!
= 6/2 + 6/1 + 6/1 (0!=1)
= 3+6+6
= 15