list - scala - 获取列表的只读子 ListView

标签 list scala iterator

我想要一个 ListSeq ,甚至是一个 List 一部分的只读 View 的 Iterable ,在我的特定情况下, View 将始终从第一个元素开始。
List.slicefilter 都是 O(n)。有没有比这更好的 - 我不需要任何操作,如 +- 等。只需 applymapflatMap 等来提供子列表上的列表理解语法。

答案是写我自己的类,它的迭代器会计数以知道终点在哪里?

最佳答案

流呢? Stream 是 Scala 的懒惰方式。由于 Stream 的惰性,Stream.take(),在这种情况下您需要的是 O(1)。唯一需要注意的是,如果您想在对 Stream 进行列表理解后取回 List,则需要将其转换回 List。 List.projection 为您提供一个 Stream,它具有 List 的大部分操作。

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)

关于list - scala - 获取列表的只读子 ListView ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1485185/

相关文章:

java - 使用自定义适配器创建列表时出现“无空构造函数”logcat 错误

scala - 通过维护顺序来聚合重复记录,并且还包括重复记录

scala - 光滑的 3.0.0 : How to query one-to-many/many-to-many relations

c++ - "vector"中的这段代码是什么意思? (C++)

c++ - 迭代器指针不引用第一个元素

c# - 使用组合器 lamba 合并 C# 中的 2 个列表

python - 将数组值的增量减少到 1

C - 合并两个字符串列表

scala - 通过在 Scala 中传递小数位数作为参数来格式化数字

c++ - 通过指针用自定义类填充 vector - 构造函数有问题