Ich habe eine ArrayList und muss in der Lage sein, auf eine Schaltfläche zu klicken und dann zufällig eine Zeichenfolge aus dieser Liste auszuwählen und in einer Nachrichtenbox anzuzeigen.
Wie würde ich das machen?
Erstellen Sie Random
irgendwo eine Instanz der Klasse. Beachten Sie, dass es ziemlich wichtig ist, nicht jedes Mal eine neue Instanz zu erstellen, wenn Sie eine Zufallszahl benötigen. Sie sollten die alte Instanz wiederverwenden, um eine Einheitlichkeit der generierten Zahlen zu erreichen. Sie können static
irgendwo ein Feld haben (seien Sie vorsichtig bei Thread-Sicherheitsproblemen):
static Random rnd = new Random();
Bitten Sie die Random
Instanz, eine Zufallszahl mit dem Maximum der Anzahl der Elemente in ArrayList
:
int r = rnd.Next(list.Count);
Zeigen Sie die Zeichenfolge an:
MessageBox.Show((string)list[r]);
Next(max)
Anrufs ist exklusiv.Normalerweise verwende ich diese kleine Sammlung von Erweiterungsmethoden:
Bei einer stark typisierten Liste können Sie Folgendes schreiben:
Wenn Sie nur eine ArrayList haben, können Sie diese umwandeln:
quelle
return list[rnd.Next(list.Count)];
Random
stattdessen in Betracht, eine Instanz von im statischen Zustand zu halten.Du kannst tun:
quelle
Erstellen Sie eine
Random
Instanz:Holen Sie sich eine zufällige Zeichenfolge:
Denken Sie jedoch daran, dass Sie das
Random
Objekt wiederverwenden sollten, wenn Sie dies häufig tun . Fügen Sie es als statisches Feld in die Klasse ein, sodass es nur einmal initialisiert wird, und greifen Sie dann darauf zu.quelle
Oder eine einfache Erweiterungsklasse wie diese:
Dann rufen Sie einfach an:
Funktioniert auch für Arrays.
Ich würde es vermeiden, anzurufen,
OrderBy()
da dies für größere Sammlungen teuer sein kann. Verwenden SieList<T>
zu diesem Zweck indizierte Sammlungen wie oder Arrays.quelle
IList
sodass die zweite Überlastung nicht erforderlich ist.Warum nicht:
quelle
quelle
maxValue
Parameter der MethodeNext
nur eine Anzahl von Elementen in einer Liste sein sollte, nicht minus eins, da laut einer Dokumentation " maxValue die ausschließliche Obergrenze der Zufallszahl ist ".Ich benutze diese ExtensionMethod seit einer Weile:
quelle
Ich werde anderen Ansatz vorschlagen, wenn die Reihenfolge der Elemente in der Liste bei der Extraktion nicht wichtig ist (und jedes Element nur einmal gewählt werden), dann anstelle eines
List
kann man ein verwenden ,ConcurrentBag
die eine Thread-sicher ist, ungeordnete Sammlung von Objekte:Der EventHandler:
Der
TryTake
versucht, ein "zufälliges" Objekt aus der ungeordneten Sammlung zu extrahieren.quelle
Ich brauchte mehr Artikel als nur einen. Also schrieb ich Folgendes:
Mit dieser Option können Sie beliebig viele Elemente abrufen:
quelle
Drucken eines zufälligen Ländernamens aus einer JSON-Datei.
Modell:
Implementierung:
quelle
Warum nicht [2]:
quelle