初始化hashmap时元素太多

Xin*_*ein 3 scala hashmap

当我在初始化时设置不可变的hashmap内容,如下所示:

var result_tags=HashMap[String,Int]()
    result_tags=("video"->0,"game"->0,"news"->0,"ee"->0,"sport"->0,
  "shop"->0,"ju"->0,"story"->0,"pho"->0,"con"->0,"live"->0,"life"->0,"soft"->0,"hire"->0,"car"->0,
  "mm"->0,"mus"->0,"mob"->0,"male"->0,"heal"->0, "sca"->0,"bank"->0,"mail"->0,"cool"->0,"pict"->0, "dl"->0)
Run Code Online (Sandbox Code Playgroud)

它给了我错误:

too many elements for tuple:26,allowed:22
Run Code Online (Sandbox Code Playgroud)

这意味着元组的最大数量是22.我知道->是用于创建元组.是否有其他方法来初始化hashmap而没有其元素的限制数量.

Ori*_*ski 7

你实际上在做什么是初始化一个巨型Tuple类型并尝试将它分配给类型的result_tags变量,HashMap即使元组大小不超过最大大小也不会起作用.

因此,关于元组的错误并不是指->您使用的语法,而是指(...)列表中的元素数.即使你这样写,你也会得到同样的错误:

(("video", 0), ("game", 0), ..., ("dl", 0))
Run Code Online (Sandbox Code Playgroud)

其次,在你的情况下,你应该做:

var result_tags = HashMap("video" -> 0, "game" -> 0, ..., "dl" -> 0)
Run Code Online (Sandbox Code Playgroud)

(请注意,我省略了类型信息,因为Scala会为您推断出类型.)

(a1, a2, ..., aN)Scala中的语法完全不同,因为它初始化了一个元组类型.每一个这样的声明转换成TupleN类型,其中的最大大小为22,所以Scala库实际上具有22不同Tuple,从类Tuple1到Tuple22.

第三,你的风格可以使用一些修正

  • 你应该更喜欢地图的不可变版本 scala.collection.Map
  • 你应该更喜欢不可变的变量,这意味着val代替var
  • 而且不那么重要,但变量名称最好是camelCased,所以那就是 resultTags