繁体   English   中英

将键值对添加到Scala中的Map

[英]Adding key-value pairs to Map in scala

我对scala还是很陌生,想创建一个哈希图,其键为候选,值为投票数。 像这样的东西:{(1:20),(2:4),(3:42),..}。

我已经尝试使用以下代码:

 val voteTypeList = textFile.map(x=>x(2)) //String array containing votes: [3,4,2,3,2,1,1,1,9,..]

 var voteCount:Map[String,Int] = Map()

 voteTypeList.foreach{x=>{

     if (voteCount.contains(x)){ //Increment value
       var i: Integer = voteCount(x)
       voteCount.updated(x, i+1)
      // print(voteCount(x))
     }
     else{ //Create new key-value pair
     //  println(x)
       voteCount += (x -> 1) 

   }}}

 print(voteCount.size)

但是表决计数未创建,.size返回0。

谢谢!

您遇到的问题是由使用var持有不变的Map 将其更改为持有可变Mapval

val voteCount:collection.mutable.Map[String,Int] = collection.mutable.Map()

话虽这么说,代码还有很多其他问题,这使得它对于Scala的工作方式而言不是惯用的。

您真正想要的是更接近此的东西。

val voteCount = voteTypeList.groupBy(identity).mapValues(_.length)

Jwvh的回答是惯用的,但不是显而易见的,而且,如果列表中有大量重复项,则将占用大量内存。

您可能还会考虑采用字面量(但仍然是标量)的方式:

 val voteCount = voteTypeList.foldLeft(Map(): Map[Int, Int]) { (v, x) =>
    v + (x -> (v.getOrElse(x, 0) + 1))
  }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM