2016-08-23 18 views
0

我在Scala中有一個映射,其中的值是列表的列表。我嘗試用下面的代碼添加值:列表作爲映射值的列表不能編譯

var map = Map[String,List[List[String]]]() 
val list1 = List ("A111", "B111") 
var listInMap = map.getOrElse("abc", List[List[String]]()) 
listInMap += list1 // this line does not compile 
map += ("abc" -> listInMap) 

的問題是,在該行listInMap += list1它拋出type mismatch; found : List[String] required: String。爲什麼需要字符串,如果我需要添加一個列表到列表中?我需要添加list1listInMap

回答

5

listInMap += list1相當於listInMap = listInMap + list1+運算符未在List中爲最新的scala庫(2.11.8)(在2.7中標記爲棄用)中定義。因此,+運算符只需將字符串值listInMaplist1與最新的scala庫連接起來。

對於最新的Scala,您可以使用,listInMap = listInMap :+ list1

此外,檢查:https://stackoverflow.com/a/7794297/1433665作爲附加在Scala中列出具有複雜度O(n)的

+0

不是'listInMap + = list1'將'list1'添加到'listInMap'而不是反之呢?我需要添加'list1'到'listInMap' – ps0604

+0

嘿@ ps0604,是的,你是對的。檢查我更新的答案。我希望這是有幫助的。 – TheKojuEffect

+0

現在我收到這個錯誤:'type mismatch;發現:List [java.io.Serializable] required:List [List [String]]' – ps0604

1

您的問題是list1沒有被插入正確的深度/水平。

這將編譯。

. . . 
map += ("abc" -> (listInMap ++ List(list1))) 
map("abc") // result: List[List[String]] = List(List(A111, B111))