2017-08-12 2 views
0

J'ai 4 listes de sélection, une pour chaque type (couvre-chef, chemise intérieure, chemise extérieure, pantalon).Générer des permutations à partir des listes de sélection

ListBox aurait des éléments d'un seul type (par exemple chapeau, chapeau rouge et le soleil, vert ...)

Je veux être en mesure de générer toutes les permutations de tous les éléments des 4 listboxes, et enregistrer les résultats dans un fichier texte.

Ainsi, la sortie, par exemple, contiendrait:

    cap
  • , rouge | t-shirt, marron | cavalier, marron | pantalon, bleu
  • chapeau de soleil, bleu | t-shirt, marron | veste, orange | shorts, gris

J'ai essayé de regarder ce post, tournant les listboxes dans des tableaux, générant alors les permutations. Cependant, je ne peux pas l'enregistrer dans un fichier, ou dans une liste puis dans un fichier.

Alors comment générer toutes les permutations à partir des quatre listes?

Répondre

0

Ces deux procédures feront ce que vous voulez. Bien que, si c'est pour quelque chose de plus qu'une tâche d'école, je suggérerais plutôt que de travailler avec des listes comme source de données pour les permutations, créer une classe pour chaque objet (chapeau, chemise, pull et pantalon). Chacun peut ensuite avoir ses propres propriétés telles que le code de stock, la description, la couleur, la taille, le numéro de commande, le fournisseur, etc. Ensuite, générez une chaîne de détails pour chaque article de la description, de la couleur et de la taille. les chaînes de détails de chaque article. Bien sûr, en fin de compte, vous seriez mieux d'utiliser une base de données, mais c'est plus loin dans le développement de votre programme.

Private Function GeneratePermutations() As List(Of String) 
    Dim permList As New List(Of String) 
    For Each hat As String In ListBox1.Items 
     For Each shirt As String In ListBox2.Items 
      For Each jumper As String In ListBox3.Items 
       For Each trousers As String In ListBox4.Items 
        permList.Add(hat & "," & shirt & "," & jumper & "," & trousers) 
       Next 
      Next 
     Next 
    Next 
    Return permList 
End Function 

Private Sub SaveFile(permlist As List(Of String), filename As String) 
    If File.Exists(filename) Then 
     Dim result As DialogResult = MessageBox.Show("File Exists, Overwrite? Y/N", "File Exists", MessageBoxButtons.YesNo) 
     If result = DialogResult.No Then 
      Exit Sub 
     End If 
    End If 
    Try 
     Using sr As New StreamWriter(filename) 
      For Each line As String In permlist 
       sr.WriteLine(line) 
      Next 
     End Using 
    Catch ex As Exception 
     MessageBox.Show("Exception:" & ex.Message & vbCrLf & "Inner Exception :" & ex.InnerException.Message) 
    End Try 
End Sub 

Exemple d'utilisation

Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load 
    Dim permutationList As New List(Of String) 
    For i As Integer = 1 To 5 
     ListBox1.Items.Add("Hat" & i.ToString) 
     ListBox2.Items.Add("Shirt" & i.ToString) 
     ListBox3.Items.Add("Jumper" & i.ToString) 
     ListBox4.Items.Add("Trousers" & i.ToString) 
    Next 
    permutationList = GeneratePermutations() 
    SaveFile(permutationList, "K:\perms.txt") 
End Sub 

Ces lignes ..

permutationList = GeneratePermutations() 
SaveFile(permutationList, "K:\perms.txt") 

pourrait être écourtée suite à

SaveFile(GeneratePermutations, "K:\perms.txt") 

et le li suivant ne serait alors pas nécessaire

Dim permutationList As New List(Of String)