एक सामान्य टिप:। उपयोग .iterator
विधि उदारतापूर्वक, मध्यवर्ती संग्रह के निर्माण से बचने, और इस तरह अपने गणना तेजी लाने के लिए। (केवल प्रदर्शन की आवश्यकताओं को यह मांग करते हैं। वरना ऐसा नहीं।)
scala> def myFun(s: String, i: Int) = s + i
myFun: (s: String, i: Int)java.lang.String
scala> Array("nami", "zoro", "usopp")
res17: Array[java.lang.String] = Array(nami, zoro, usopp)
scala> res17.iterator.zipWithIndex
res19: java.lang.Object with Iterator[(java.lang.String, Int)]{def idx: Int; def idx_=(x$1: Int): Unit} = non-empty iterator
scala> res19 map { case (k, v) => myFun(k, v) }
res22: Iterator[java.lang.String] = non-empty iterator
scala> res22.toArray
res23: Array[java.lang.String] = Array(nami0, zoro1, usopp2)
ध्यान रखें कि iterators परिवर्तनशील होते हैं, और इसलिए एक बार सेवन किया फिर से उपयोग नहीं किया जा सकता।
एक तरफ एक: map
कॉल ऊपर de-tupling और फिर समारोह प्रयोग शामिल है। यह बल कुछ स्थानीय चर का उपयोग करते हैं। आप कुछ उच्च आदेश जादूगर का उपयोग करके इससे बच सकते हैं - एक नियमित फ़ंक्शन को एक स्वीकार्य टुपल में परिवर्तित करें, और उसके बाद इसे map
पर पास करें।
scala> Array("nami", "zoro", "usopp").zipWithIndex.map(Function.tupled(myFun))
res24: Array[java.lang.String] = Array(nami0, zoro1, usopp2)
मैं गति सामान पर अपने जवाब पढ़ने प्यार कर रहा हूँ, लेकिन यह कभी कभी तो निराशाजनक हो सकता है ... :-) –
धन्यवाद। एक चयन बहुत अच्छा है। – Ivan
'a.view.zipWithIndex.map {केस (एस, i) => myFn (s, i)} की गति कैसे आपके समाधानों की तुलना करता है? – gzm0