मैं संग्रह से विशिष्ट, यादृच्छिक तत्वों का एक विशिष्ट संख्या (> 1) कैसे सुंदरता से प्राप्त कर सकता हूं?स्मॉलटॉक में संग्रह से यादृच्छिक तत्वों की एक विशिष्ट संख्या कैसे प्राप्त करें?
उत्तर
यह कुछ मैं दिखता है और अधिक या कम अच्छा लगता है कि है, लेकिन के रूप में कुशल के रूप में यह हो सकता है नहीं है:
yourCollection asSet asOrderedCollection shuffled first: numberOfElements
पर विचार करें निम्नलिखित कोड का टुकड़ा
sample: anInteger from: aCollection using: aGenerator
| sample |
sample := Set new: anInteger.
[sample size = anInteger]
whileFalse: [ | element |
element := aCollection atRandom: aGenerator.
sample add: element].
^sample asArray
कुछ टिप्पणियों
स्पष्ट जेनरेटर: यह स्पष्ट रूप से दिए गए जनरेटर का उपयोग करता है, यानी
Random
का एक उदाहरण, जिसे मैंनेaGenerator
कहा है। गणितीय कारणों के लिए, यदि आपको अपने आवेदन के लिए नमूने मिल रहे हैं, तो उन सभी को आपके कार्यक्रम में एक ही जनरेटर का उपयोग करना चाहिए। इसके अलावा यह आपको एक अतिरिक्त लाभ देगा: सहेजें और बाद मेंseed
को पुनर्स्थापित करें और आप अपने सिस्टम के पिछले "यादृच्छिक" व्यवहार को पुन: उत्पन्न करने में सक्षम होंगे, जो परीक्षण के लिए अच्छा है।उपलब्धता के लिए कोई जांच: कोड की जाँच नहीं है कि यह वांछित नमूना है, इस स्थिति हो सकता है अगर
aCollection
कम से कमanInteger
अलग तत्व नहीं प्राप्त करने के लिए संभव है।वर्गहीन कोड: विधि कुछ वर्ग के पास जाना चाहिए।
उदाहरण के लिए:
Random >> sample: anInteger from: aCollection
| sample |
sample := Set new: anInteger.
[sample size = anInteger]
whileFalse: [ | element |
element := aCollection atRandom: self.
sample add: element].
^sample asArray
अद्यतन
यहाँ एक और तरीका है:
Random >> remove: anInteger from: aCollection
| sample |
sample := OrderedCollection new: anInteger.
anInteger timesRepeat: [| index element |
index := aCollection size atRandom: self.
element := aCollection removeAt: index.
sample add: element].
^sample
टिप्पणी
आमतौर पर ऐसा होता है कि जब हम पुनरावृत्ति के बिना नमूना करना चाहते हैं तो हम संग्रह से तत्वों को भी हटाना चाहते हैं क्योंकि हम उन्हें यादृच्छिक रूप से चुनते हैं। इन मामलों में अक्सर ऐसा होता है कि संग्रह को दोहराव नहीं माना जाता है।
हम्म, मुझे "बायो जनरेटर" दृष्टिकोण पसंद है, लेकिन यदि संग्रह और नमूना आकार बड़ा है, तो आप अंत में थोड़ी देर इंतजार कर सकते हैं जब तक जनरेटर अंत में "मुक्त" संख्या नहीं चुनता। –
@ AmosM.Carpenter अच्छा बिंदु। मैं जो भी उपयोग करता हूं वह दूसरे दृष्टिकोण के करीब है। –
नाइटपीकी होने के लिए खेद है, लेकिन आपको '#removeIndex:' का उपयोग नहीं करना चाहिए - यह निजी होना है। सार्वजनिक विधि का उपयोग करना '#removeAt:' इसके बजाय हटाए गए तत्व का उत्तर देने का अतिरिक्त लाभ होगा, जिसका अर्थ है कि आप अतिरिक्त 'तत्व' अस्थायी चर से छुटकारा पा सकते हैं (यानी केवल 'नमूना जोड़ें: (aCollection removeAt: index) ') ।उन "निकालें" विधियां 'ऑर्डर्ड कोलेक्शन' पर हैं, इसलिए यह अन्य प्रकार के संग्रहों के साथ काम नहीं करेगी। –
- 1. रेल: यादृच्छिक रिकॉर्ड की एक विशिष्ट संख्या प्राप्त करें
- 2. फैक्टरीगर्ल में यादृच्छिक संख्या कैसे प्राप्त करें?
- 3. संरचना में तत्वों की संख्या कैसे प्राप्त करें?
- 4. सी (लिनक्स) में यादृच्छिक संख्या यादृच्छिक संख्या कैसे करें?
- 5. REST - एक यादृच्छिक संख्या प्राप्त करें या पोस्ट करें?
- 6. एक फ्लोट रेंज के बीच यादृच्छिक संख्या कैसे प्राप्त करें?
- 7. स्विफ्ट में एक सेट से यादृच्छिक तत्व कैसे प्राप्त करें?
- 8. जावास्क्रिप्ट ऑब्जेक्ट में तत्वों की संख्या
- 9. एक बीज से यादृच्छिक संख्या
- 10. बड़ी संख्या में संख्याओं से बड़ी संख्या कैसे प्राप्त करें?
- 11. वॉटर में एचटीएमएल में एक ही विशेषता वाले तत्वों की संख्या कैसे प्राप्त करें?
- 12. एक सरणी में तत्वों की संख्या प्राप्त करने के लिए कैसे, जब तत्वों अज्ञात
- 13. एन विशिष्ट तत्वों पर बाइनरी खोज पेड़ों की संख्या
- 14. आर में यादृच्छिक संख्या कैसे उत्पन्न करें?
- 15. एक यादृच्छिक संख्या समय की एक यादृच्छिक संख्या लेकिन कभी एक ही यादृच्छिक संख्या का चयन दो बार
- 16. एक यादृच्छिक संख्या जनरेटर
- 17. मज़बूती से एक सरणी में तत्वों की संख्या का निर्धारण
- 18. चैनल में तत्वों की संख्या
- 19. स्मॉलटॉक: संग्रह को दो मानदंडों से क्रमबद्ध करें
- 20. एक यादृच्छिक संख्या
- 21. एक यादृच्छिक संख्या जनरेटर
- 22. Watin के साथ तत्वों की एक सूची कैसे प्राप्त करें?
- 23. विशिष्ट वर्ण के बाद एक स्ट्रिंग से संख्या प्राप्त करें और उस संख्या को परिवर्तित करें
- 24. किसी विशिष्ट यूआरएल के फेसबुक * शेयर * की संख्या प्राप्त करें
- 25. संग्रह से केवल विशिष्ट कुंजी पुनर्प्राप्त करें
- 26. एक यादृच्छिक संख्या
- 27. enum तत्वों को यादृच्छिक कैसे करें?
- 28. निरंतर मूल्य के रूप में enum में तत्वों की संख्या कैसे प्राप्त करें?
- 29. स्मॉलटॉक -
- 30. कुछ मानों को छोड़कर, किसी मान से यादृच्छिक संख्या कैसे प्राप्त करें
बहुत ही सुरुचिपूर्ण। दक्षता में सुधार करने के लिए एकमात्र तरीका मैं देख सकता था (जो आम तौर पर कोई मुद्दा नहीं होगा, लेकिन कुछ लोग इसे लटकाते हैं ...) संग्रह के बजाय _indices_ को घुमाएंगे (क्योंकि कम सूचकांक होंगे) , और फिर उन यादृच्छिक इंडेक्स को एक सेट से बाहर लेने के लिए '#atAll:' जैसे कुछ का उपयोग करें (यदि आपको उन्हें _distinct_ चाहिए तो भी आपको अभी भी '# asSet' की आवश्यकता होगी)। –