[英]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
。 将其更改为持有可变Map
的val
。
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.