初始化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)

它给出了错误:

too many elements for tuple:26,allowed:22

表示元组的最大数目为22。我知道->是用来创建元组的。是否有其他方法来初始化hashmap,而不限制其元素的数量

你实际上在那里做的是初始化一个巨大的Tuple类型,并试图将其分配给result_tags变量,这是HashMap类型,即使元组大小不会超过也不会工作最大大小。

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

(("video", 0), ("game", 0), ..., ("dl", 0))

第二,在你的情况下,你应该做:

var result_tags = HashMap("video" -> 0, "game" -> 0, ..., "dl" -> 0)

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

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

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

  • 您应该选择不可变的map版本,即scala.collection.Map
  • 您应该选择不可变变量,这意味着val而不是var
  • 不太重要,但是变量名最好是camelcase,所以应该是resultTags

Just

var result_tags = Map("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)

这是在Scala中初始化Map的方法

地图初始化

import scala.collection.immutable.Map
val result_tags = Map("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)

HashMap初始化

import scala.collection.immutable.HashMap
val result_tags = HashMap("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)

您也可以在不可变中使用+方法。HashMap类来实现您想要做的事情:

来自scala文档:

def +[B1 >: B](elem1: (A, B1), elem2: (A, B1), elems: (A, B1)*): HashMap[A, B1]
Adds two or more elements to this collection and returns a new collection.

val result_tags = HashMap[String,Int]()
val result_tags_filled = 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)

最新更新