我有一个数组
Array(1, 2, 3, 5)我需要计算所有的减法来得到一个新的列表
Array(1, 1, 2) // Array(2-1, 3-2, 5-3)如果您使用的是sliding和mapping,则实现起来非常容易
(xs sliding 2).toList map { case List(x, y) => y - x }但是如果我想通过MR来计算呢?有可能吗?至于我,我看不到任何这样做的可能性。也许还有其他的想法呢?
发布于 2015-12-30 09:12:50
可能是这样的:
list.zip(list.drop(1)).map { case(x,y) => y-x }您也可以使用foldRight来完成此操作:
list.foldRight(List.empty[Int]) {
case (x, Nil) => List(x)
case (x, y :: tail) => x :: (y - x) :: tail
}.drop(1)但是我可以问一下你在这里真正想要做的是什么吗?
或者,如果您出于某种模糊的原因坚持只使用map和reduce (这会是什么原因),下面这样的代码将会起作用:
list
.map { x => List(x) }
.reduce { (a,b) =>
b.head :: (b.head - a.head) :: a.tail
}.drop(1).reverse这实际上是作弊,因为您给reduce的函数必须是可交换和可联想的,而本例中两者都不是。它只是碰巧在玩具应用程序中工作,因为没有并行性,但不要尝试在现实生活中使用它,因为它可能会非常严重地崩溃……也是因为没有理由这样做。
https://stackoverflow.com/questions/34520414
复制相似问题