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

数组 – 在Scala映射数组时如何获取元素索引?

发布时间:2020-12-16 09:40:36 所属栏目:安全 来源:网络整理
导读:我们来看一个简单的映射示例: val a = Array("One","Two","Three") val b = a.map(s = myFn(s)) 我需要的是使用不是myFn(s:String):String这里,但myFn(s:String,n:Int):String,其中n将是a的索引。在这种特殊情况下,myFn将期望s ==“One”的第二个
我们来看一个简单的映射示例:

val a = Array("One","Two","Three")
  val b = a.map(s => myFn(s))

我需要的是使用不是myFn(s:String):String这里,但myFn(s:String,n:Int):String,其中n将是a的索引。在这种特殊情况下,myFn将期望s ==“One”的第二个参数为0,s ==“Two”为1,s ==“Three”为2。我该如何实现?

解决方法

取决于您是否需要方便或速度。

慢:

a.zipWithIndex.map{ case (s,i) => myFn(s,i) }

更快:

for (i <- a.indices) yield myFn(a(i),i)

{ var i = -1; a.map{ s => i += 1; myFn(s,i) } }

可能最快:

Array.tabulate(a.length){ i => myFn(a(i),i) }

如果没有,这肯定是:

val b = new Array[Whatever](a.length)
var i = 0
while (i < a.length) {
  b(i) = myFn(a(i),i)
  i += 1
}

?(在Scala 2.10.1中使用Java 1.6u37,如果“可能最快”声明为需要1x时间进行简单的字符串操作(将长字符串截断为几个字符),则“slow”需要两倍时间,“更快”每个时间长1.3x,“肯定”只有0.5倍的时间。)

(编辑:李大同)

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

    推荐文章
      热点阅读