当我在初始化时设置不可变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
类,从Tuple1
到Tuple22
。
第三,你的风格可以使用一些修改
- 您应该选择不可变的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)