kotlin地图中的plus()和put()方法有什么区别?
我创建了地图并使用plus()方法添加我的键值对但是当我打印地图时,我找不到添加的值。然后我转移到put()。 plus()方法的行为是什么?
答案 0 :(得分:6)
如the documentation中所述,plus
方法(通常在其运算符形式中使用+
)返回一个新地图,其中包含原始地图中的元素和键/值对作为参数传递给它。它不会修改调用它的地图。
将值添加到Kotlin地图的惯用方法不是使用put
方法,而是使用方括号:
map[key] = value
答案 1 :(得分:2)
常规{
"error" : {
"root_cause" : [
{
"type" : "illegal_argument_exception",
"reason" : "[script] unknown field [source], parser not found"
}
],
"type" : "illegal_argument_exception",
"reason" : "[script] unknown field [source], parser not found"
},
"status" : 400
}
(不可变)只能使用Map
函数进行修改(也可以使用+运算符调用)。
plus
运算符使用值对,并且本质上不会修改原始映射;它返回一个带有新条目的新地图。
plus
使用// mapA and mapB are different maps
val mapA = mapOf("a" to 1, "b" to 2)
val mapB = mapA + ("c" to 3)
时,除了MutableMap
(仍会返回新地图)之外,还有一些更改地图内容的选项:plus
,{{ 1}}(这是[]运算符)和put
(+ =运算符)。
set
和plusAssign
之间的差异,就像函数调用一样,set
返回键的前一个值(或null),而put
不返回任何东西。此外,使用括号语法时,不能将其用作函数的表达式主体。在创建包装类来访问地图内的数据时,它特别有用:
put
(当然,在上面的示例中,您可以更改setter以使用块语法而不是表达式语法,这是一个品味问题)
set
的语法类似于class SomeWrapper(private val backingMap: MutableMap<String, String?>) {
var someIntValue: Int?
get() = backingMap["someInt"]?.toIntOrNull()
set(value) = backingMap.set("someInt", value.toString())
// this is invalid because assignments are not expressions
// set(value) = backingMap["someInt"] = value
// this is also invalid because put would return String? instead of Unit
// set(value) = backingMap.put("someInt", value)
}
,但它会更改原始地图:
plusAssign