Scala 方法来转换点数组

标签 scala

我有一个点数组。对于除第一个之外的每个点,我想减去前一个:

Array((1,1), (3,1), (4,3)) 变成 Array((1,1), (2,0), (1 ,2))

我提出了一种“某种”函数式风格:

val trans = for (i <- 0 until points.length - 1) 
  yield {
    (points(i + 1)._1 - points(i)._1, points(i + 1)._2 - points(i)._2)
}
val result = trans ++ points

但我觉得它可以做得更好。完成转换后,我将要在 result 中添加所有元组。

最佳答案

通常,您编写的 for-comprehension 是通过 zip 完成的:

(xs zip xs.drop(1)).map{ case ((x1,y1), (x2,y2)) => (x2-x1, y2-y1) }

其余的(添加第一个元素)是专门用于您自己的。 (您可以将 (0,0) 添加到 xs.drop(1) 的前面,或者将 xs.take(1) 添加到结果。)

另外,请注意,完全可以将整个算法与 sum 一起编写为单次折叠或递归。

(我假设您在这里没有性能限制。)

关于Scala 方法来转换点数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30716763/

相关文章:

scala - 将不可变转换为可变集合

scala - Spark中独立爆炸多个列

scala - MapPartitions 上的垃圾收集问题

scala - 带有替代方法的重载方法值

scala - 使用 Scala 进行 Akka actors 单元测试

linux - 同时运行一个 jar 的多个实例 : memory issue

scala - 将列表转换为元素映射 -> Scala 中的列表(元素)

Scala 宏分配解构函数的参数

scala - 模式匹配和类型系统有什么关系?

scala - scala 2.10 编译器中 scala.language.dynamics 错误的解决方法