Items zufällig sortieren

  • VB.NET
  • .NET (FX) 4.0

Es gibt 12 Antworten in diesem Thema. Der letzte Beitrag () ist von ~blaze~.

    Oder Etwas in dieser Art:

    VB.NET-Quellcode

    1. Public Class Form1
    2. Private _rnd As New Random()
    3. Private _items As New List(Of String) From {"huhu", "huhu1", "huhu2", "huhu3"}
    4. Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    5. _items = _items.OrderBy(Function() _rnd.Next()).ToList()
    6. ListBox1.DataSource = _items
    7. End Sub
    8. End Class
    Die Unendlichkeit ist weit. Vor allem gegen Ende. ?(
    Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken. 8o
    @ sothere meinst Du mischen?
    Mach Dir ein Integer-Array mit genau so vielen zufälligen verschiedenen Elementen wie die ListBox Items hat.
    Pack Deine ListBox-Elemente in ein Object-Array und sortiere beide Arrays gekoppelt, Das geht in VB mit dynamischen Arrays etwas blöd:

    VB.NET-Quellcode

    1. Dim ListBox1 As New ListBox
    2. ListBox1.Items.Add(1)
    3. ListBox1.Items.Add(2)
    4. ListBox1.Items.Add(3)
    5. ListBox1.Items.Add(4)
    6. ListBox1.Items.Add(5)
    7. Dim lb = New List(Of Object)
    8. For i = 0 To ListBox1.Items.Count - 1
    9. lb.Add(ListBox1.Items(i))
    10. Next
    11. Dim lb2() = lb.ToArray
    12. Dim ll() = {5, 4, 3, 2, 1}
    13. Array.Sort(ll, lb2) ' hier ist lb2 neu sortiert, musst nur noch zurück-übertragen
    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!
    @RodFromGermany : Genau. Ich habe eine beliebige Anzahl an Elementen, die ich Random mischen will. (Ich möchte das ganze aber auch rückgängig machen, also in irgendeiner Variable den Zustand vor dem mischen speichern.
    Dein Code ist ja ganz interessant, ich verstehe ihn bloß nicht :D

    In lb speicherst du die Items ab.
    In lb2 wird das ganze als Array konvertiert (wieso?)
    Aber was ist ll ? Und wie befülle ich das mit der richtigen Anzahl an Elementen (Ich hab ja nicht exakt 5 Elemente, sondern immer eine unterschiedliche Anzahl)

    Ich weiß, das das eigentlich totale Anfängerfragen sind, aber ich bekomme es einfach nicht hin
    Liebe Grüße
    sothere

    sothere schrieb:

    als Array konvertiert
    Weil Array.Sort ein Array haben will, nicht aber eine List.ToArray.
    So sortierst Du hin- und her:

    VB.NET-Quellcode

    1. Array.Sort(ll, lb2)
    2. Array.Sort(ll2, lb)
    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!
    lb2 ist einFach dein gemischtes Array - also DataBinding oder Addrange und lb1 ist gleichzeitig dein VorherZustand. Nur sollten halt die Items von ll nicht umbedingt sortiert sein (die geben halt die neue Position des jeweiligen Items an).
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais
    Sorry, aber ich bin heut irgendwie durch den Wind.
    Könntest du mir das eventuell an einem Stück Code zeigen?
    Ich will das mischen und wiederherstellen können, aber ich stehe gerade total auf dem Schlauch, wie ich was zuordne:
    Und wie befülle ich das mit der richtigen Anzahl an Elementen (Ich hab ja nicht exakt 5 Elemente, sondern immer eine unterschiedliche Anzahl)


    Und wie ordne ich das der Listbox dann wieder zu?
    Liebe Grüße
    sothere
    Sofern du den Code verstehst, nimm den von @SpaceyX . Der ist kurz, effizient und unabhängig von den Items.
    »There's no need to "teach" atheism. It's the natural result of education without indoctrination.« — Ricky Gervais

    ~blaze~ schrieb:

    eine effizientere Lösung über die Vertauschung eines jeden Elements
    hab ich leider nicht, da hier Wiederholungen vorkommen können:
    Bilder
    • Items.jpg

      32,68 kB, 658×350, 153 mal angesehen
    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!
    Dummheit meinerseits... Unglaubliche Dummheit...
    Es soll natürlich vertauscht werden.

    Edit:

    VB.NET-Quellcode

    1. Dim items As IList(Of T)
    2. Dim rnd As New Random()
    3. Dim count As Integer = items.Count
    4. For i As Integer = 0 To count - 1
    5. Dim temp As T = items(i)
    6. Dim nextI As Integer = rnd.Next(0, count)
    7. items(i) = items(nextI)
    8. items(nextI) = temp
    9. Next


    Gruß
    ~blaze~

    Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()