Ich habe eine Liste des Typs System.IO.FileInfo
, und ich möchte die Liste randomisieren. Ich dachte, ich erinnere mich, dass ich vor einiger Zeit etwas wie list.randomize()
gesehen habe, aber ich kann nicht herausfinden, wo ich das gesehen haben könnte.Gibt es eine einfache Möglichkeit, eine Liste in VB.NET zu randomisieren?
Mein erster Ausflug in diese ergab mich mit dieser Funktion.
Private Shared Sub GetRandom(ByVal oMax As Integer, ByRef currentVals As List(Of Integer))
Dim oRand As New Random(Now.Millisecond)
Dim oTemp As Integer = -1
Do Until currentVals.Count = IMG_COUNT
oTemp = oRand.Next(1, oMax)
If Not currentVals.Contains(oTemp) Then currentVals.Add(oTemp)
Loop
End Sub
ich es senden die max val ich möchte es, wiederholen und ein Verweis auf die Liste möchte ich den randomisierten Inhalt in der Die Variable IMG_COUNT
ist weiter oben im Skript festgelegt und gibt an, wie viele zufällige Bilder angezeigt werden sollen.
Danke Jungs, ich schätze es: D
Ich bekomme immer einen Fehler: "Class 'Randomizer' muss 'Funktion Compare (x als T, y als T) As Integer' für die Schnittstelle 'System.Collections.Generic.IComparer (of T)' implementieren." Dieser Fehler wird nur mit Ihrem zweiten Codeblock erhalten. – Anders
Beachten Sie, dass diese Methode bei der zweiten Option nicht in einer separaten Klasse leben muss, und Sie verwenden sie wie gezeigt mithilfe des AddressOf-Operators, anstatt eine Klasseninstanz zu erstellen. –
-1: Nur eine schlechte Implementierung. Die Funktion sticht eigentlich nichts zufällig auf, weil zwei Listen, die die gleichen Elemente enthalten, in der gleichen Reihenfolge "randomisiert" werden. Nichts hindert sequentielle Objekte daran, sequentielle Hashcodes zu haben. Es gibt viel bessere Möglichkeiten, diese Funktion zu schreiben. – Juliet