kotlin映射中的plus()和put()方法有什么区别?
kotlin映射中的plus()和put()方法有什么区别 我已经创建了映射并使用plus()方法添加键值对,但是当我打印映射时,我找不到添加的值。然后我移动到put()。plus()方法的行为是什么?如中所述,kotlin映射中的plus()和put()方法有什么区别?,kotlin,Kotlin,kotlin映射中的plus()和put()方法有什么区别 我已经创建了映射并使用plus()方法添加键值对,但是当我打印映射时,我找不到添加的值。然后我移动到put()。plus()方法的行为是什么?如中所述,plus方法(通常以运算符形式使用,+)返回一个新映射,其中包含原始映射中的元素以及作为参数传递给它的键/值对。它不会修改调用它的映射 向Kotlin映射添加值的惯用方法不是使用put方法,而是使用方括号: map[key] = value 常规的Map(不可变)只能使用plus函数(
plus
方法(通常以运算符形式使用,+
)返回一个新映射,其中包含原始映射中的元素以及作为参数传递给它的键/值对。它不会修改调用它的映射
向Kotlin映射添加值的惯用方法不是使用put
方法,而是使用方括号:
map[key] = value
常规的
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
(仍将返回新映射)之外,还有几个选项可以更改映射的内容:put
、set
(这是[]运算符)和plusAssign
(这是+=运算符)
作为函数调用,set
和put
之间的区别在于put
返回键的上一个值(或null),而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)
}
Well+通常不会修改其操作数。
val map = mutableMapOf("a" to 1, "b" to 2)
map += ("c" to 3)