我想了解为什么下面的foobars值都是3而不是1,2,3.是不是应该将a映射到1等?
val foo = Array(1,2,3)
val bar = Array("a","b","c")
import scala.collection.mutable.Map
var foobars = Map[String, Int]()
for (f <- foo; b <- bar) foobars += (b -> f)
println(foobars)
// Map(b -> 3, a -> 3, c -> 3)
Run Code Online (Sandbox Code Playgroud)
不,你问题中的代码就像一个嵌套循环.就好像你这样做了:
for (f <- foo) {
for (b <- bar) {
foobars += (b -> f)
}
}
Run Code Online (Sandbox Code Playgroud)
会发生什么:在外部循环的第一次迭代中,foo为每个键分配第一个值bar.所以你会得到:Map('a' -> 1, 'b' -> 1, 'c' -> 1).然后,在外部循环的第二次迭代中,覆盖条目,最后是:Map('a' -> 2, 'b' -> 2, 'c' -> 2).在第三次迭代中,您再次覆盖条目,因此最终结果为:Map('a' -> 3, 'b' -> 3, 'c' -> 3).
你可以zip用来实现你想要的:
val foobars = (bar zip foo).toMap
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
52 次 |
| 最近记录: |