Die Unendlichkeit ist weit. Vor allem gegen Ende.
Manche Menschen sind gar nicht dumm. Sie haben nur Pech beim Denken.
@ 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
Dim ListBox1 AsNew ListBox
ListBox1.Items.Add(1)
ListBox1.Items.Add(2)
ListBox1.Items.Add(3)
ListBox1.Items.Add(4)
ListBox1.Items.Add(5)
Dim lb =New List(OfObject)
For i =0To ListBox1.Items.Count -1
lb.Add(ListBox1.Items(i))
Next
Dim lb2() = lb.ToArray
Dim ll() = {5, 4, 3, 2, 1}
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
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
Weil Array.Sort ein Array haben will, nicht aber eine List.ToArray.
So sortierst Du hin- und her:
VB.NET-Quellcode
Array.Sort(ll, lb2)
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!
Gut, aber wie bringe ich das ganze wieder in die Listbox?
Liebe Grüße
sothere
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
Hi
oder eine effizientere Lösung über die Vertauschung eines jeden Elements:
eine effizientere Lösung über die Vertauschung eines jeden Elements
hab ich leider nicht, da hier Wiederholungen vorkommen können:
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
Dim items As IList(Of T)
DimrndAsNew Random()
Dim count AsInteger= items.Count
For i AsInteger=0To count -1
Dim temp As T = items(i)
Dim nextI AsInteger=rnd.Next(0, count)
items(i) = items(nextI)
items(nextI) = temp
Next
Gruß
~blaze~
Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „~blaze~“ ()