加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 在数组中查找索引的功能代码

发布时间:2020-12-16 19:22:35 所属栏目:安全 来源:网络整理
导读:我想在功能样式中重构这段 Scala代码: var k = -1for (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代码:

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,因为在你的代码中,当你遇到一个谓词所在的对时,你不会停止循环.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读