你是在命令式而不是功能上思考。如果你想在 Scala 中对数组中的每个元素应用一个函数,那么惯用的做法是利用 map 函数,这样你就有了类似的东西:
val elements = Array(1,2,3,4,5)
val results = elements map { x => x+4}
如果您需要在函数调用中使用每个元素的索引,则使用带有索引的 zip 将数组转换为对数组(或序列),如下所示:
scala> elements.zipWithIndex
res0: Array[(Int, Int)] = Array((1,0), (2,1), (3,2), (4,3), (5,4), (6,5))
然后你可以再次应用一个映射,这次应用一个函数,它接受一对而不是单个元素:
scala> elements.zipWithIndex map { case (x,y) => (x, y*5) }
res2: Array[(Int, Int)] = Array((1,0), (2,5), (3,10), (4,15), (5,20), (6,25))
或
scala> elements.zipWithIndex map { case (x, y) => x*y }
res3: Array[Int] = Array(0, 2, 6, 12, 20, 30)
如果你想为每个索引应用不同的函数,那么只需在 map 闭包中提供不同的定义:
scala> elements.zipWithIndex map {
case (0, y) => y + 45
| case (1, y) => y + 5
| case (_, y) => y
| }