सरणियों के लिए:
import scala.util.Random
import scala.reflect.ClassTag
def takeSample[T:ClassTag](a:Array[T],n:Int,seed:Long) = {
val rnd = new Random(seed)
Array.fill(n)(a(rnd.nextInt(a.size)))
}
एक यादृच्छिक संख्या जनरेटर (rnd
) अपने बीज के आधार पर करें। फिर, अपने सरणी के आकार तक 0 से यादृच्छिक संख्या के साथ एक सरणी भरें।
अंतिम चरण आपके इनपुट सरणी के इंडेक्सिंग ऑपरेटर को प्रत्येक यादृच्छिक मान लागू कर रहा है। आरईपीएल में इसका इस्तेमाल करते हुए इस प्रकार दे सकता है:
scala> val myArray = Array(1,3,5,7,8,9,10)
myArray: Array[Int] = Array(1, 3, 5, 7, 8, 9, 10)
scala> takeSample(myArray,20,System.currentTimeMillis)
res0: scala.collection.mutable.ArraySeq[Int] = ArraySeq(7, 8, 7, 3, 8, 3, 9, 1, 7, 10, 7, 10,
1, 1, 3, 1, 7, 1, 3, 7)
सूचियों के लिए, मैं बस सूची सरणी में बदलने का और एक ही समारोह का प्रयोग करेंगे। मुझे संदेह है कि आप सूचियों के लिए वैसे भी अधिक कुशल हो सकते हैं।
यह ध्यान रखें, कि एक ही समारोह सूचियों का उपयोग कर हे ले जाएगा (एन^2) समय, सूची परिवर्तित जबकि पहले सरणियों को हे ले जाएगा (एन) समय
रैंडम संख्या जनरेटर स्टेटफुल हैं, तो यह मतलब नहीं है सूचियाँ इस तरह के संबंध के लिए के लिए एक समारोह। आपको स्वयं को एक लागू करना होगा (यह भी, यह एक रैखिक समय ऑपरेशन होगा)। सरणी के लिए, आप "यादृच्छिक" ऑब्जेक्ट्स से एक यादृच्छिक पूर्णांक प्राप्त कर सकते हैं जैसे: 'Random.nextInt (myArray.length)' और अनुक्रमणिका सरणी में। – Felix
अहह, एनवीएम। मैंने आपकी मदद के लिए बहुत जल्दी xD – Felix
धन्यवाद फ़ेलिक्स पढ़ा। – Carter