2016-09-24 56 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)