Kotlin Map中plus()和put()方法之间的区别是什么?
我已经创建了地图,并使用plus()方法添加了键值对,但是在打印地图时,找不到添加的值。然后我转到了put()。plus()方法的行为是什么?
如文档中所述,该plus方法(通常以其运算符形式使用+)返回一个新映射,该映射包含原始映射中的元素以及作为参数传递给它的键/值对。它不会修改在其上调用的地图。
向Kotlin地图添加值的惯用方式不是使用该put方法,而是使用方括号:
map[key] = value
Run Code Online (Sandbox Code Playgroud)
小智 6
正则Map(不可变)只能使用plus函数(也可以使用 + 运算符调用)进行修改。
该plus运算符使用值对,并且本质上不会修改原始映射;它返回带有新条目的新地图。
// mapA and mapB are different maps
val mapA = mapOf("a" to 1, "b" to 2)
val mapB = mapA + ("c" to 3)
Run Code Online (Sandbox Code Playgroud)
使用 时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)
}
Run Code Online (Sandbox Code Playgroud)
(当然,在上面的示例中,您可以将 setter 更改为使用块语法而不是表达式语法,这是一个品味问题)
的语法plusAssign与 类似plus,但它会更改原始映射:
val map = mutableMapOf("a" to 1, "b" to 2)
map += ("c" to 3)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1950 次 |
| 最近记录: |