dav*_*veb 4 iterator scala list
我想要一个List,Seq甚至Iterable是一个List的一部分的只读视图,在我的特定情况下,视图将始终从第一个元素开始.
List.slice,是O(n)原样filter.反正有做比这更好的-我不需要像任何操作+,-等刚apply,map,flatMap,等提供的子名单列表中理解语法.
是编写我自己的类的答案,其迭代器会计算结束的位置?
流怎么样?Stream是Scala的懒惰方式.由于Stream的懒惰,Stream.take(),在这种情况下你需要的是O(1).唯一需要注意的是,如果您想在Stream上执行列表解析后返回List,则需要将其转换回List.List.projection为您提供了一个包含List大部分操作的Stream.
scala> val l = List(1, 2, 3, 4, 5)
l: List[Int] = List(1, 2, 3, 4, 5)
scala> val s = l.projection.take(3)
s: Stream[Int] = Stream(1, ?)
scala> s.map(_ * 2).toList
res0: List[Int] = List(2, 4, 6)
scala> (for (i <- s) yield i * 2).toList
res1: List[Int] = List(2, 4, 6)
Run Code Online (Sandbox Code Playgroud)
List.slice和List.filter都返回Lists - 根据定义,它们是不可变的.+和 - 方法返回不同的List,它们不会更改原始List.而且,很难比O(N)做得更好.List不是随机访问,而是链表.因此,想象一下,如果您想要的子列表是List的最后一个元素.访问该元素的唯一方法是遍历整个List.
| 归档时间: |
|
| 查看次数: |
6537 次 |
| 最近记录: |