kotlin地图中的plus()和put()方法有什么区别?

时间:2018-03-01 09:39:08

标签: kotlin

kotlin地图中的plus()和put()方法有什么区别?

我创建了地图并使用plus()方法添加我的键值对但是当我打印地图时,我找不到添加的值。然后我转移到put()。 plus()方法的行为是什么?

2 个答案:

答案 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(+ =运算符)。

setplusAssign之间的差异,就像函数调用一样,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