Wählen Sie ein zufälliges Element einer Enum in D

8

Ich habe gewählt, um zufällige Werte aus Enums wie folgt auszuwählen:

%Vor%

Dies ist überraschend ausführlich und anfällig für Probleme, wenn Enumerationsmitglieder Werte außerhalb des Standardwerts (oder größer als int ) annehmen.

Idealerweise würde ich einen Bereich nehmen, der die Elemente der Enumeration darstellt, und dies an randomSample liefern. Dies scheint jedoch nicht möglich zu sein.

Gibt es einen idiomatischen Weg, um einen zufälligen Wert aus einer Aufzählung in D auszuwählen?

BEARBEITEN:

Unter Verwendung der Antwort von fwend gibt es hier eine Template-Funktion, die das erreicht, was ich will:

%Vor%     
cmh 27.08.2012, 16:29
quelle

1 Antwort

9
%Vor%

Bearbeiten : Wenn Sie die Enumerationswerte mehrmals verwenden müssen, können Sie sie zuerst in einem statischen unveränderlichen Array speichern, andernfalls wird das Array jedes Mal neu erstellt. Damit kannst du auch die magische Zahl 3 loswerden.

%Vor%

Edit 2 : Wie von Idan Arye aufgezeigt, könnte die Vorlage sogar terser sein:

%Vor%

Bearbeiten 3 : tgehr hat die folgende Lösung vorgeschlagen, mit der die Nachschlagetabelle einmal zur Kompilierungszeit erstellt wird und die GC-Zuweisung vollständig vermieden wird:

%Vor%     
fwend 27.08.2012, 16:53
quelle

Tags und Links