2017-03-06 24 views
2

我想用特定的鍵值對添加/設置可變映射的元素。 到目前爲止,我想通了,我可以用加運營商對數據類型以及增加新的元素:Kotlin基礎知識:如何添加或設置Map的元素?

var arr3:Map<Any, Any> = mutableMapOf() 
arr3 += Pair("manufacturer", "Weyland-Yutani") 
//also, the "to" operator works too: 
//arr3 += ("manufacturer" to "Weyland-Yutani") 

但是,我找不到如何修改或添加新鍵值對:

arr3["manufacturer"] = "Seegson" // gives an error(Kotlin: No set method providing array access) 
arr3["manufacturer"] to "Seegson" // compiles, but nothing is added to the array 

請您詳細說明我該怎麼做?

回答

7

您聲明可變arr3明確類型Map<Any, Any>Map)接口不允許突變。 +=運算符創建映射的新實例並變量變量arr3。要修改地圖的內容,申報arr3MutableMap像這樣:

var arr3:MutableMap<Any, Any> = mutableMapOf() 

或更地道

var arr = mutableMapOf<Any, Any>() 

注意,通常你需要或者可變變量var或可變實例類型MutableMap但是從我的經驗很少都。

換句話說,你可以使用可變變量與不變類型:

var arr = mapOf<Any,Any>() 

,並使用+=操作員修改其中arr點。

或者你可以使用MutableMap與不變arr變量和修改,其中arr點內容:

val arr = mutableMapOf<Any,Any>() 

很明顯,你只能修改MutableMap內容。因此arr["manufacturer"] = "Seegson"只能用於聲明的變量。

+0

**「+ =運算符創建一個map的新實例並改變變量arr3」**當它,這種行爲欺騙了我(錯誤的類型是我的錯)。感謝您的詳細解答! –

3

關於添加/設置操作,這些都可以被執行MutableMap<K, V>(不只是Map<K, V>),並可以通過多種方式來完成:

  • 的Java風格put電話:

    arr3.put("manufacturer", "Seegson") 
    

    該調用返回以前與該關鍵字相關的值,或null

  • 更慣用科特林呼叫使用set operator

    arr["matufacturer"] = "Seegson" 
    
  • plusAssign運算符的語法:

    arr += "manufacturer" to "Seegson" 
    

    該選項引入了呼叫之前創建的Pair的開銷,是因爲較少的可讀它可能會與var重新分配相混淆(另外,由於含糊不清,它不適用於var),但仍然是當您已經有想要添加的Pair時很有用。