2017-09-28 181 views
1

有沒有什麼辦法通過使用變量在scala中創建可變映射? 我正在用source.fromFile(「abc.csv」)。getlines讀取一個csv文件。我希望這個文件的前2列成爲關鍵值,並作爲值休息。我想對第二個文件做同樣的事情,這樣我就可以根據這個鍵比較這兩個文件並獲得差異。 如:文件abc.csv是如下: 公司,EMPID,名稱 1,10,美國廣播公司 1,11,PQR 2,10,XYZ斯卡拉 - 可變映射

我想O/P爲Map(110-> ABC,111-> PQR,210-1> XYZ)

我試圖通過實現它:

var keymap = collection.mutable.Map[Int,String]() 
val content = Source.fromFile("abc.csv").getLines; 
val data = content.drop(1); //to remove header 
for (line <-data){ 
    val x = line.substring(0,1).toInt; 
    val y = line.substring(2,4).toInt; 
    var key = (x*100) + y; 
    var value = line.substring(9); 
    var keymap += (key,value); 
} 

但它給誤差 - :60:錯誤:類型不匹配; 發現:詮釋 要求:(智力,字符串) 鍵盤映射+ =(鍵,值) ^

有人可以請建議我在做什麼錯誤,或有更好的方法來做到這一點? 謝謝!

+0

沒有必要可變地圖這樣做 – cchantep

回答

0

如果keymap是可變的,爲什麼你把它作爲var,把它當作val.Try這個。

scala> val tasks = mutable.Map[Int,String]() 
tasks: scala.collection.mutable.Map[Int,String] = Map() 
scala> tasks += (1,"Book a movie ticket") 
<console>:14: error: type mismatch; 
found : Int(1) 
required: (Int, String) 
     tasks += (1,"Book a movie ticket") 
scala> tasks += (1 -> "Book a movie ticket") 
res13: tasks.type = Map(2 -> " movie ticket", 1 -> Book a movie ticket) 

所以,你必須要改變這種

keymap += (key-> value) 
+0

都能跟得上它仍然沒有工作。我也從keymap + =(key,value)中刪除了var/val,因爲我已經在第一行聲明瞭keymap。但仍然沒有工作。 – MGM

+0

這次錯誤是什麼? –

+0

如果我更改爲val,因爲您建議它給出錯誤「=」的預期,但';'找到。 val keymap + =(key,value); 如果我刪除var/val它給出的錯誤給出了我的第一個問題中提到的相同的錯誤。 – MGM