2012-04-02 2 views
4

VB.NET에서 모든 조합 (순열이 아닌)을 생성해야합니다. 검색을했는데 순열에 대한 것으로 나타났습니다. 순열). 내가 필요로 무엇VB에서 모든 실제 조합을 생성합니다. VB.net

문자열 배열의 조합을 생성하는 것입니다 :

난 그냥 1 개 길이를 말한다면, 그것은 반드시 반환 :

one 
two 
three 
four 
five 
six 

내가 만약

Dim data_array As String() = {"one", "two", "three", "four", "five", "six"} 

을 그 필요 2 길이라고 말하면, 되돌아 와야합니다 :

oneone 
onetwo 
onethree 
onefour 
... etc ... 
twoone 
twotwo 
twothree 
... etc ... 

그리고 모든 조합으로 끝날 때까지 계속됩니다.

내가 더 길게 말하면 잘해라.

나를 도와 줄 사람이 있습니까? 고맙습니다.

답변

5

:

사용 예제 모든 순열을 생성하려고합니다.

원한다면 재귀 적으로 시도해보십시오. 조합을 생성하려면 Root 매개 변수를 테스트하여 추가하기 전에 myStr이 포함되어 있는지 확인하십시오.

Public Class Form1 
    Dim data_array As String() = {"one", "two", "three", "four", "five", "six"} 
    Dim buffer As New List(Of String) 

Public Sub Permute(ByVal Root As String, ByVal Depth As Integer, ByVal Buffer As List(Of String)) 

    For Each myStr As String In data_array 

      If Depth <= 1 Then 
       Buffer.Add(Root + myStr) 
      Else 
       Permute(Root + myStr, Depth - 1, Buffer) 
      End If 

    Next 

End Sub 

Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load 
    Permute("", 2, buffer) 
End Sub 
End Class 
+0

VB는 코드가 어떤 값도 반환하지 않는다고 말하면 어떻게 사용할 수 있을지 모르겠다. – Minion

+1

버퍼 변수의 내용을 검사해야한다. 여기에는 문자열 목록이 포함됩니다.나는 2라는 깊이로 불렀다. 이것은 당신이 oneone, onetwo, onethree 등을 얻어야한다는 것을 의미한다. 깊이 3을 가지고 전화하면 oneonetw, oneonethree, onetwoone 등을 얻을 것이다. – deadlyvices

+0

그것은 작동한다! 고맙습니다. :) – Minion

1

이해야 리턴한다 IEnumerable(Of String)

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 data_array As String() = {"1", "2", "3", "4", "5", "6"} 
     Dim reslt = GetCombinations(2, data_array) 
+0

내가 그것을 사용하면 (그 배열로 명확한 결과를 얻으려면 : { "1", "2", "3", "4", "5", "6}}) 3 4 5 6 1 1 1 1 1 1, 다른 배열은 각 문자열의 첫 번째 문자 만 다른 결과로 반환합니다. 첫 번째 문자를 반복하면 ... – Minion

+0

함수의 정확한 인수는 무엇입니까? 깊이가 2 인 {1, 2, 3, 4, 5, 6}을 사용하면 1,2,3,4,5,6,11,12,13이 반환됩니다. , 14,15,16. – Alex

+0

내가 다른 배열을 사용하는 경우 명확한 결과를 얻기 위해이 함수를 사용 했으므로 함수는 배열의 각 문자열의 첫 번째 문자 만 반환합니다. ottffsoooooo, 그 이유 때문에 숫자 (""로 인용 된 문자열)를 사용합니다. 명확한 결과 ... – Minion

관련 문제