i have scala iterator
(i can use either datatype comfortably purpose) i've cast seq
. i'd keep around until i'm ready it, i'd able size of in o(1). wondering if there built-in way of setting things allow me keep hold of iterator size on iterable object.
your best bet wrap in iterator, if can pay cost of indirection.
class sizediterator[a](underlying: iterator[a], val initalsize: int) extends iterator[a] { def next = underlying.next def hasnext = underlying.hasnext }
and then
new sizediterator(myseq.iterator, myseq.length)
keep in mind, however, if map or whatever new sizediterator
end plain iterator
, no longer know how long initialsize
was.
also keep in mind won't know how of iterator consumed, initialsize
upper bound on size, when use there might none left.
alternatively, can
myseq.iterator.zipwithindex.map{ case (x,i) => (x, myseq.length-1) }.take(myseq.length)
to produce iterator
pairs of element , number of elements left (including one--you'll never hit 0 way).
if want known size tell in o(1)
, .length
method on seq
cast iterable
resolve fast method have when seq
--this whole point of overriding methods--and therefore won't (usually) consume new iterator
each time. requires keep iterable
around, not iterator
.
Comments
Post a Comment