scala中是否有等效的python reduce()函数?
我刚开始学习
Scala和函数式编程,我正在尝试将以下内容从
Python转换为Scala:
def immutable_iterative_fibonacci(position): if (position ==1): return [1] if (position == 2): return [1,1] next_series = lambda series,_: series + [series [-1] + series [-2]] return reduce(next_series,range(position - 2),[1,1]) 我无法弄清楚Scala中的reduce相当于什么.这就是我现在拥有的.除了最后一行,一切正常. def immutable_fibonacci(position: Int) : ArrayBuffer[Int] = { if (position == 1){ return ArrayBuffer(1) } if (position == 2){ return ArrayBuffer(1,1) } var next_series = (series: ArrayBuffer[Int]) => series :+ ( series( series.size - 1) + series( series.size -2)) return reduce(next_series,2 to position,ArrayBuffer(1,1)) } 解决方法
Python
reduce 摘要,供参考:
reduce(function,iterable[,initializer]) 穿越 一个好的类型是 降低 当省略初始化器arg时,相当于Python的reduce是Scala的 reduceLeft[B >: A](op: (B,A) => B): B Python函数的可迭代arg对应于Traversable实例,Python函数的函数arg对应于op. 请注意,还有一些名为reduce,reduceRight,reduceLeftOption和reduceRightOption的方法,它们相似但略有不同. 折 您的示例提供了初始化程序arg,对应于Scala的 foldLeft[B](z: B)(op: (B,A) => B): B Python函数的初始化程序arg对应于foldLeft中的z arg. 再次注意,有一些名为fold和foldRight的相关方法. 斐波那契 在不更改算法的情况下,这里是代码的清理版本: def fibonacci(position: Int): Seq[Int] = position match { case 1 => Vector(1) case 2 => Vector(1,1) case _ => (2 to position).foldLeft(Vector(1,1)) { (series,_) => series :+ (series(series.size - 1) + series(series.size - 2)) } } 一些杂项说明: >我们通常不会使用return关键字 虽然我们讨论的是集合和Fibonacci系列,但为了好玩,您可能需要查看 val fibs: Stream[BigInt] = BigInt(0) #:: BigInt(1) #:: fibs.zip(fibs.tail).map { n => n._1 + n._2 } fibs.drop(1).take(6).mkString(" ") // "1 1 2 3 5 8" (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |