【发布时间】:2023-03-14 06:34:01
【问题描述】:
在 Clojure 中,我可以使用偏移步长对向量进行分区,例如
(partition 2 1 [1 2 3 4])
这会返回一个包含 n 个项目的列表序列,每个项目的偏移量相隔一步。 例如前面的方法返回
((1 2) (2 3) (3 4))
我只是想知道如何在 Scala 中实现同样的目标
【问题讨论】:
在 Clojure 中,我可以使用偏移步长对向量进行分区,例如
(partition 2 1 [1 2 3 4])
这会返回一个包含 n 个项目的列表序列,每个项目的偏移量相隔一步。 例如前面的方法返回
((1 2) (2 3) (3 4))
我只是想知道如何在 Scala 中实现同样的目标
【问题讨论】:
使用sliding - Array(1, 2, 3, 4).sliding(2)。这会给你一个Iterator,你可以打电话给例如toArray 并获得 Array[Array[Int]] 内部结构符合要求。
【讨论】:
标准库sliding中有此功能
scala> val x = Array(1, 2, 3).sliding(2, 1)
x: Iterator[Array[Int]] = non-empty iterator
scala> x.next
res8: Array[Int] = Array(1, 2)
scala> x.next
res9: Array[Int] = Array(2, 3)
【讨论】:
scala> val l = List(1, 2, 3, 4, 5)
l: List[Int] = List(1, 2, 3, 4, 5)
scala> l.sliding(2).toList
res0: List[List[Int]] = List(List(1, 2), List(2, 3), List(3, 4), List(4, 5))
【讨论】:
我认为这可以满足您的需要:
List(1,2,3,4).sliding(2,1).toList
【讨论】: