myFn(s)) 我需要的是不使用 myFn(s-6ren">
gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-03 10:31:44 25 4
gpt4 key购买 nike

让我们考虑一个简单的映射示例:


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

我需要的是不使用 myFn(s: String): String在这里,但是 myFn(s: String, n: Int): String ,其中 n将是 s 的索引在 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
}

(在带有 Java 1.6u37 的 Scala 2.10.1 中,如果声明“可能最快”需要 1 倍的时间来执行一个简单的字符串操作(将长字符串截断为几个字符),那么“慢”需要 2 倍的时间,“更快”每个都需要 1.3 倍的时间,而“肯定”只需要 0.5 倍的时间。)

关于arrays - 在Scala中映射数组时如何获取元素索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9137644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com