आप एक ट्रैवर्सबल का दृश्य ले सकते हैं। आप TraversableView
आलसी ढंग से टुकड़ा कर सकते हैं।
प्रारंभिक सितारा इसलिए है क्योंकि आरईपीएल कुछ आउटपुट प्रिंट करता है।
scala> val t: Traversable[Int] = Stream continually { println("*"); 42 }
*
t: Traversable[Int] = Stream(42, ?)
scala> t.view.slice(0,2).size
*
res1: Int = 2
scala> val t: Traversable[Int] = Stream.fill(1) { println("*"); 42 }
*
t: Traversable[Int] = Stream(42, ?)
scala> t.view.slice(0,2).size
res2: Int = 1
लाभ यह है कि कोई मध्यवर्ती संग्रह नहीं है।
scala> val t: Traversable[_] = Map((1 to 10) map ((_, "x")): _*)
t: Traversable[_] = Map(5 -> x, 10 -> x, 1 -> x, 6 -> x, 9 -> x, 2 -> x, 7 -> x, 3 -> x, 8 -> x, 4 -> x)
scala> t.take(2)
res3: Traversable[Any] = Map(5 -> x, 10 -> x)
एक unoptimized मानचित्र रिटर्न यही कारण है कि, उदाहरण के लिए:
scala> res3.getClass
res4: Class[_ <: Traversable[Any]] = class scala.collection.immutable.HashMap$HashTrieMap
scala> Map(1->"x",2->"x").getClass
res5: Class[_ <: scala.collection.immutable.Map[Int,String]] = class scala.collection.immutable.Map$Map2
स्रोत
2014-09-25 20:42:26
आप के साथ 'दृश्य (0,2) .size' किसी भी संग्रह के निर्माण से बच सकते हैं। –