List(of String) durchmischen

  • VB.NET

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von LaMiy.

    List(of String) durchmischen

    Ich würde gerne eine List(of String) so durchmischen, dass eine zufällige Reihenfolge entsteht.
    Das heißt das Item eins dann an z.B zehnter Stelle steht.
    Mir fehlt bei der Umsetzung jedoch jegliche Idee.
    Ich könnte mir nur vorstellen, dass man:

    VB.NET-Quellcode

    1. Dim a As Integer = list.Count

    und:

    VB.NET-Quellcode

    1. For Each item In list
    2. 'item.
    3. Next

    brauchen wird. Weiß jemand vielleicht wie man anfangen könnte ?
    Hey,

    ... viele Wege führen nach Eschelbronn. Lade z.B. die Inhalte in eine temporäre zweite Liste und verschiebe dann unter Zuhilfenahme einer Zufallszahl (in den Grenzen 0 bis .Count -1) in einer Schleife ein Item nach dem anderen in deine eigentliche Liste.

    Gruß Manschula
    Hey,

    trial and error - einfach mal versuchen ;) Beachten solltest du noch, dass so Einträge auch doppelt vorkommen können; nämlich immer dann, wenn eine Zufallszahl doppelt (mehrfach) auftritt. Wenn dies nicht gewünscht ist, musst du also das entsprechende Item nach dem Verschieben aus deiner temporären Liste löschen ...

    Gruß Manschula
    Pack Deine Liste in ein Array (ListArray => List.ToArray).
    Erstell Dir ein zweites Array (IntArray, Integer, gleiche Länge), und fülle dies mit Zufallszahlen.
    Sortiere beide Listen parallel: Array.Sort(IntArray, ListArray)
    und befülle Deine List mit dem ListArray (Clear, AddRange()).
    Fertich.
    Falls Du diesen Code kopierst, achte auf die C&P-Bremse.
    Jede einzelne Zeile Deines Programms, die Du nicht explizit getestet hast, ist falsch :!:
    Ein guter .NET-Snippetkonverter (der ist verfügbar).
    Programmierfragen über PN / Konversation werden ignoriert!
    Vielen Dank, werde es probieren .

    Edit:

    VB.NET-Quellcode

    1. Dim a As Integer = 0
    2. Dim i As Integer = lng.Length + 1
    3. For Each item In System.IO.Directory.GetFiles(lng, "*.txt*")
    4. item = item.Remove(0, i)
    5. list.Add(item)
    6. ' ListBox1.Items.Add(item)
    7. a = a + 1
    8. Next
    9. Dim liste(a - 1) As Integer
    10. Dim r As New System.Random()
    11. For b As Integer = 0 To a - 1 Step 1
    12. liste(b) = r.Next(1, a - 1)
    13. Next
    14. Array.Sort(liste.ToArray, list.ToArray)
    15. ListBox1.Items.Clear()
    16. For Each item In list
    17. ListBox1.Items.Add(item)
    18. Next


    Ich habe diesen Code gebastelt, aber ich bekomme die Liste genauso angezeigt wie vorher.
    Wo liegt/en der/die Fehler ?

    VB.NET-Quellcode

    1. Dim lng As String
    2. Dim list As New List(Of String)


    #erledigt

    VB.NET-Quellcode

    1. Private Sub Shuffle(ByVal lst As System.Collections.IList)
    2. Static rnd As New Random()
    3. For i As Integer = 1 To lst.Count - 1
    4. Swap(lst, i, rnd.Next(i + 1))
    5. Next
    6. End Sub
    7. Public Sub Swap(ByVal lst As IList, ByVal i1 As Integer, ByVal i2 As Integer)
    8. Dim tmp As Object = lst(i1)
    9. lst(i1) = lst(i2)
    10. lst(i2) = tmp
    11. End Sub

    Dieser Beitrag wurde bereits 4 mal editiert, zuletzt von „LaMiy“ ()