2012-02-01 36 views
45

यह कम से कम महत्वपूर्ण स्कैला प्रश्न हो सकता है, लेकिन यह मुझे परेशान कर रहा है। मैं एन यादृच्छिक संख्या की एक सूची कैसे उत्पन्न करूंगा। मेरे पास अब तक क्या है:यादृच्छिक संख्याओं की सूची कैसे उत्पन्न करें?

def n_rands(n : Int) = { 
val r = new scala.util.Random 
1 to n map { _ => r.nextInt(100) } 
} 

कौन सा काम करता है, लेकिन मुझे बहुत स्केलरिफ़िक नहीं दिखता है। मैं सुझावों के लिए खुला हूं।

संपादित

इसलिए नहीं कि यह इतना यह मनोरंजक और पीछे मुड़कर देखें तो स्पष्ट है के रूप में प्रासंगिक है, यह की तरह दिखता है निम्नलिखित काम करता है:

1 to 20 map r.nextInt 

लेकिन लौटे सूची में प्रत्येक प्रविष्टि के सूचकांक है उस अंतिम के ऊपरी बाउंड भी। पहला नंबर 1 से कम होना चाहिए, दूसरा 2 से कम होना चाहिए, और इसी तरह। मैं इसे तीन या चार बार भाग गया और देखा "हममम, परिणाम हमेशा 0 के साथ शुरू होता है ..."

+3

आपको सबसे पहले जो करना चाहिए वह 'var' के बजाय' r' a 'val' बना है। – Jesper

+0

@ जेस्पर - धन्यवाद। – Malvolio

+0

@ जेस्पर - पांच साल बाद और मैं आखिरकार पहली चीज करता हूं जो मुझे करना चाहिए ... – Malvolio

उत्तर

80

आप Don's solution उपयोग कर सकते हैं या:

Seq.fill(n)(Random.nextInt) 

ध्यान दें कि आपको एक नया Random ऑब्जेक्ट बनाने की आवश्यकता नहीं है, आप उपरोक्त वर्णित डिफ़ॉल्ट साथी ऑब्जेक्ट रैंडम का उपयोग कर सकते हैं।

+0

मुझे 'nextInt' फ़ंक्शन के लिए अधिकतम आपूर्ति करने की आवश्यकता है। आश्चर्य की बात है (कम से कम मेरे लिए) यह काम किया: 'Seq.fill (6) (Random.nextInt (100))' – Malvolio

+0

यह आश्चर्य की बात नहीं है, यादृच्छिक साथी ऑब्जेक्ट देखें: http://www.scala-lang.org/api /current/index.html#scala.util.Random – Nicolas

+0

मेरा मतलब था, मुझे आश्चर्य हुआ कि 'Random.nextInt (100)' को अज्ञात फ़ंक्शन के रूप में व्याख्या किया गया था * मैं चाहता था कि यह मूल्यवान व्यक्त किया जाए मैंने सोचा कि ऐसा लगता है। – Malvolio

29

के बारे में कैसे:

import util.Random.nextInt 
Stream.continually(nextInt(100)).take(10) 
+3

शायद यह सबके लिए स्पष्ट है लेकिन मुझे 'वैल आर = नया उपयोग करने की ज़रूरत है। यादृच्छिक; स्ट्रीम करने के लिए कोड प्राप्त करने के लिए Stream.continually (r.nextInt) .take (10) '। – pr1001

+0

मैंने इसे 'Stream.continually (r.nextInt (100)) के रूप में लिखा है। (10) .toist' - '.toistist' अनावश्यक हो सकता है लेकिन' r.' नहीं है। – Malvolio

+0

भ्रम के लिए खेद है, मैं उपयोग आयात किया था। Random.nextInt @ निकोलस अनुमानित के रूप में। थोड़ी अधिक उपयोगिता के लिए आप Stream.continually (nextInt (100)) का वैल आउट कर सकते हैं। –

4

अपने संपादित करें के बारे में,

nextInt यादृच्छिक संख्या के लिए एक ऊपरी बाध्य के रूप में एक Int तर्क ले जा सकते हैं, इसलिए 1 to 20 map r.nextInt, 1 to 20 map (i => r.nextInt(i)) रूप में ही है बल्कि एक अधिक उपयोगी संकलन त्रुटि से।

1 to 20 map (_ => r.nextInt(100)) जो आपने इरादा किया है वह करता है। लेकिन Seq.fill का उपयोग करना बेहतर है क्योंकि यह आपके द्वारा किए जा रहे कार्यों का अधिक सटीक रूप से प्रतिनिधित्व करता है।

संबंधित मुद्दे