Jag är en relativt grön programerare som intresserat mig för vb, och naturligtvis stöter jag på problem redan i mitt första mer avancerade program. Således vänder jag mig till pellesofts expertis med frågan om det är möjligt att generera alla kombinationer utan att lita på "random" och mitt tålamod. Det du söker heter "shuffle". Googla på det (och VB) så hittar du säkert något. Vill du att kombinationerna ska genereras i ordning eller spelar det ingen roll? Hittar inte något begripligt med "Shuffle", tyvär. Handlar det om att använda variabler för att loopa en funktion tills att alla kombinationer är utförda? Finns det måhända en länk eller ett utkast där jag kan stifta bättre bekantskap med denna funktion? En variant i .net: Det här låter som ett problem jag hade tidigare; Kolla/sök efter "Permutations" (tror jag att det hette).... Jag vill ju inte spela besserwisser på något sätt men en fyrsiffrig kod baserad på a-ö samt 0-9 genererar drygt 2,3 milljoner kombinationer, lite många för en texbox kanske men över till frågan. Lösningsförslag baserat på Jonas exempel:Generera alla möjliga kombinationer
Målet är att jag ska loopa ett kommando så att alla kombinationer av en (exempelvis 4-siffrig kod) a-ö, 0-9, automatiskt textas i en sidoligande multi-textbox...
Hoppas jag gör mig förstådd!
//HASv: Generera alla möjliga kombinationer
Sv: Generera alla möjliga kombinationer
T.ex.
0000
0001
...
000ö
0010
0011
o.s.v.Sv:Generera alla möjliga kombinationer
Sv: Generera alla möjliga kombinationer
' exempel på användning
Private Sub Button4_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button4.Click
Dim resultat As List(Of String)
Dim k As Bokstavskombinerare = New Bokstavskombinerare(New Char() {"a", "b"})
resultat = k.GeMigAllaKombinationer(5)
End Sub
' här händer det
Private Class Bokstavskombinerare
Private _teckenrymd As Char()
Public Sub New(ByVal teckenrymd As Char())
_teckenrymd = teckenrymd
End Sub
Public Function GeMigAllaKombinationer(ByVal längd As Integer) As List(Of String)
Dim ord(längd - 2) As Char
Dim resultat As New List(Of String)
' TODO: hantera längd < 1 et.c.
GeMigAllaKombinationerHelper(ord, 0, resultat)
Return resultat
End Function
Private Sub GeMigAllaKombinationerHelper(ByVal ord As Char(), ByVal startpos As Integer, ByVal resultat As List(Of String))
If startpos > UBound(ord) Then
For Each tecken As Char In _teckenrymd
resultat.Add(ord & tecken)
Next
Else
For Each tecken As Char In _teckenrymd
ord(startpos) = tecken
GeMigAllaKombinationerHelper(ord, startpos + 1, resultat)
Next
End If
End Sub
End Class
Sv: Generera alla möjliga kombinationer
Sv: Generera alla möjliga kombinationer
Jag kan tyvärr inte lämna ett VB svar men jag har gjort något liknande med SQL. Du skapar en kartesisk produkt genom att i 4 tabeller skriva in det som skall kombineras och därefter gör du en select utan join.
Tex. Vi har 4 tabeller benämda t1-t4 (orginellt va?) innehållandes värdena 0 och 1.
Select * from t1,t2,t3,t4
ger
0 0 0 0
0 0 0 1
osv
totalt 2^4 (16) kombinationer.
mvh
JonasSv:Generera alla möjliga kombinationer
DECLARE @teckentabell TABLE
(
tecken char(1)
)
DECLARE @tecken int
SET @tecken = ASCII(0)
-- Lägg till siffror
WHILE @tecken < ASCII(9) + 1
BEGIN
INSERT INTO @teckentabell(tecken) VALUES (CHAR(@tecken))
PRINT CHAR(@tecken)
SET @tecken = @tecken + 1
END
-- Små bokstäver
SET @tecken = ASCII('a')
WHILE @tecken < ASCII('z') + 1
BEGIN
INSERT INTO @teckentabell(tecken) VALUES (CHAR(@tecken))
PRINT CHAR(@tecken)
SET @tecken = @tecken + 1
END
INSERT INTO @teckentabell(tecken) VALUES ('å')
INSERT INTO @teckentabell(tecken) VALUES ('ä')
INSERT INTO @teckentabell(tecken) VALUES ('ö')
-- alla möjliga kombinationer™
SELECT n1.tecken + n2.tecken + n3.tecken + n4.tecken
FROM @teckentabell n1
CROSS JOIN @teckentabell n2
CROSS JOIN @teckentabell n3
CROSS JOIN @teckentabell n4