分享

碰到scala的一个奇怪的问题,请大家帮忙看看

回帖奖励 8 云币      回复本帖可获得 1 云币奖励! 每人限 1 次
[mw_shl_code=scala,true]def main(args : Array[String])  : Unit = {

    var test : Map[String, String] = Map()
    test += ("1" -> "2")
    test += ("2" -> "3")
    for(i <- 0 until 3){
      test += (("s"+i) -> "4")
    }

    //val ret = test.toList
    //ret.foreach(println)


    var arr : Array[String] = Array("e", "r", "t")
    var key = "first"

    for(i <- 0 until arr.length){
      test += (key ->  arr(i))
    }
    val ret = test.toList
    ret.foreach(println)



  }[/mw_shl_code]

打印的结果
(s2,4)
(1,2)
(s1,4)
(first,t)
(2,3)
(s0,4)


问题即,为什么在数组循环里面,Map里面为什么不能添加新的元素,只保留了最后一个  (first,t)   

已有(4)人评论

跳转到指定楼层
liuzhixin137 发表于 2016-6-2 16:34:19
我要将 RDD(String, Array(String))  格式的 RDD 转换为  RDD(String, String) 格式。
回复

使用道具 举报

easthome001 发表于 2016-6-2 16:38:38

回帖奖励 +1 云币

for(i <- 0 until arr.length){
      test += (key ->  arr(i))
    }
上面改成j试试
for(j <- 0 until arr.length){
      test += (key ->  arr(j))
    }

回复

使用道具 举报

liuzhixin137 发表于 2016-6-3 11:39:38
easthome001 发表于 2016-6-2 16:38
for(i   arr(i))
    }
上面改成j试试

sorry,是我自己的问题,Map里面的元素 会更新 key相同的元素。并不是i,j 的问题。
回复

使用道具 举报

ledasion 发表于 2017-2-7 11:34:07

回帖奖励 +1 云币

这一部分出错了
var key = "first"

    for(i <- 0 until arr.length){
      test += (key ->  arr(i))
    }

Map的Key是不一样的,所以循环的时候 first -> e 变成 first -> r 最后变成 first -> t
也就是楼主得到的结果
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关闭

推荐上一条 /2 下一条