数组 – 在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倍的时间。) (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |