क्या स्कैला के पास ऐरे क्लास से रूबीज़ each_slice का संस्करण है?Rubys 'प्रत्येक_स्लिस का स्कैला संस्करण?
8
A
उत्तर
12
स्काला 2.8 grouped
है कि होगा हिस्सा आकार n
(जो each_slice
कार्यक्षमता प्राप्त करने के लिए इस्तेमाल किया जा सकता) के ब्लॉक में डेटा:
scala> val a = Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> a.grouped(2).foreach(i => println(i.reduceLeft(_ + _)))
3
7
11
वहाँ कुछ भी है कि 2.7 में बॉक्स से बाहर काम करेंगे नहीं है जहाँ तक मुझे याद है के रूप में .x, लेकिन यह बहुत take(n)
से निर्माण करने के लिए आसान है और drop(n)
RandomAccessSeq
से:
def foreach_slice[A](s: RandomAccessSeq[A], n: Int)(f:RandomAccessSeq[A]=>Unit) {
if (s.length <= n) f(s)
else {
f(s.take(n))
foreach_slice(s.drop(n),n)(f)
}
}
scala> val a = Array(1,2,3,4,5,6)
a: Array[Int] = Array(1, 2, 3, 4, 5, 6)
scala> foreach_slice(a,2)(i => println(i.reduceLeft(_ + _)))
3
7
11
6
स्काला 2.8 के साथ परीक्षण किया गया:
+०१२३५१६४१०६१scala> (1 to 10).grouped(3).foreach(println(_))
IndexedSeq(1, 2, 3)
IndexedSeq(4, 5, 6)
IndexedSeq(7, 8, 9)
IndexedSeq(10)
'ऐरे' रैपर वर्ग बनाना बेहतर होगा, जिसने मूल 'ऐरे' को बैक एंड के रूप में उपयोग किया था, जबकि वर्तमान में केवल इसका एक टुकड़ा था। एक 'अंतर्निहित' प्रत्येक स्लिस विधि को 'ऐरे' में जोड़ा जा सकता है, जिसमें 'सूची [ArraySlice] 'लौटाया जा सकता है। क्या आप अपने उत्तर में इसे नहीं जाना चाहते हैं? :-) मैं आपको अधिक वोट नहीं दे सकता, लेकिन मैं आपकी प्रशंसा करूंगा। :-) :-) –
@ Daniel: हाहाहा - हाँ यह बेहतर होगा (तेज़), लेकिन अगर यह कहीं लाइब्रेरी में नहीं जा रहा है (और ऐसा क्यों होगा क्योंकि हम पहले ही 2.8 में समूहबद्ध हैं?), मुझे लगता है मैं इसे पाठक के लिए एक अभ्यास के रूप में छोड़ दूंगा। –
यह जगह-जगह एल्गोरिदम के लिए बेहतर काम करेगा। आप इसे स्कैला में वृद्धि के लिए हमेशा जमा कर सकते हैं। पहले, योगदानकर्ता फॉर्म को बेहतर साइन अप करें। मैं ऐसे विकल्प को देखना चाहता हूं। –