2016-09-24 76 views
3

当我在初始化设置不变的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没有它的元素的限制数量。

回答

1

只是

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) 
0

这是你如何初始化地图在斯卡拉

地图初始化

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) 
7

你实际上在做什么有是ini对一个巨大的Tuple类型进行分类并试图将其分配给类型为HashMapresult_tags变量,即使元组大小不会超过 的最大大小,该变量也不起作用。

所以,你得到的有关元组的错误并不是指你使用的语法->,而是指(...)列表中的元素数目。你会得到同样的错误,即使你写的是这样的:

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

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

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

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

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

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

  • 你应该更喜欢的地图是scala.collection.Map
  • 的不可变的版本你应该更喜欢一成不变的变量,这意味着val代替var
  • 不重要,但是变量名称优选为camelCased,所以这将是resultTags
+0

感谢,这为我工作。 – Xinstein

0

你也可以使用+方法在immutable.HashMap类来实现你试图做:

从斯卡拉DOC:

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)