में एक enum के एक यादृच्छिक तत्व का चयन करें मैं इतनी तरह enums से यादृच्छिक मान का चयन करने ले लिया है:डी
import std.random : uniform;
import std.stdio : writefln;
import std.conv;
enum E {A, B, C}
int main(){
auto select = cast(E)uniform(to!int(E.min), to!int(E.max));
writefln("select %s", select);
return 0;
}
यह आश्चर्यजनक रूप से अत्यधिक शब्द, और मुद्दों की संभावना है, यदि कोई हो enum सदस्यों डिफ़ॉल्ट बाहर के मान लेना (या int
से बड़ा)।
आदर्श रूप से मैं एक सीमा लेता हूं जो enum के तत्वों का प्रतिनिधित्व करता है, और इसे randomSample
पर प्रदान करता है। हालांकि, यह संभव नहीं प्रतीत होता है।
क्या डी में एनम से यादृच्छिक मूल्य चुनने का एक और बेवकूफ तरीका है?
संपादित करें:
fwend द्वारा प्रदान की उत्तर का उपयोग करना, यहाँ एक टेम्पलेट समारोह को प्राप्त होता है कि मैं क्या चाहते है:
T RandomEnumElement(T)() if (is(T == enum)){
auto members = [EnumMembers!T];
return members[(uniform(0, members.length))];
}
वर्तमान में संपादन संकलित नहीं होता है, 'Evalues' की आवश्यकता है' ई [] '। – cmh
@cmh अजीब, यह मेरे साथ बस ठीक है। डीएमडी 2.060 win7 – fwend
क्षमा करें यह काम करता है, टेम्पलेट फ़ंक्शन के अंदर तर्क की आवश्यकता होती है। – cmh