我想在功能样式中重构这段
Scala代码:
var k = -1 for (i <- 0 until array.length) if ((i < array.length - 1) && array(i) < array(i + 1)) k = i
Scala中的数组有indexWhere,可用于val index = array.indexWhere(c => c ==’a’).我正在寻找类似的东西,它将考虑数组的两个连续元素.
解决方法
当你需要查看集合中的相邻元素时,通常的功能方法是用它的尾部“压缩”集合.请考虑以下简化示例:
scala> val xs = List(5,4,2,3,1) xs: List[Int] = List(5,1) scala> val tail = xs.tail tail: List[Int] = List(4,1) scala> xs.zip(tail) res0: List[(Int,Int)] = List((5,4),(4,2),(2,3),(3,1)
现在我们可以使用indexWhere:
scala> res0.indexWhere { case (x,y) => x < y } res1: Int = 2
val k = (array zip array.tail) lastIndexWhere { case (x,y) => x < y }
我正在使用lastIndexWhere而不是indexWhere,因为在你的代码中,当你遇到一个谓词所在的对时,你不会停止循环.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。