如何在 Kotlin 中创建所有键初始设置为相同值的 MutableMap?
How to create a MutableMap with all keys initially set to same value in Kotlin?
我想创建一个可变映射,其键落在连续范围内,并且使用 Kotlin 在一行中初始将值设置为相同的值 9。怎么做?
您可以使用以下方式:
import java.util.*
fun main(args: Array<String>) {
val a :Int = 0
val b :Int = 7
val myMap = mutableMapOf<IntRange, Int>()
myMap[a..b] = 9
myMap.toMap()
println(myMap) //Output: {0..7=9}
}
如果你指的是值,你可以在任何 Map / MutableMap 上使用 withDefault
函数:
fun main() {
val map = mutableMapOf<String, Int>().withDefault { 9 }
map["hello"] = 5
println(map.getValue("hello"))
println(map.getValue("test"))
}
您可以尝试以下方法:
val map = object : HashMap<Int, Int>() {
init {
(1..10).forEach {
put(it, 9)
}
}
}
println(map)
我会使用 associateWith:
val map = (1..9).associateWith { 9 }.toMutableMap()
println(map) // {1=9, 2=9, 3=9, 4=9, 5=9, 6=9, 7=9, 8=9, 9=9}
它也可以与其他类型一起用作键,例如 Char:
val map = ('a'..'z').associateWith { 9 }.toMutableMap()
println(map) // {a=9, b=9, c=9, d=9, e=9, f=9, g=9, h=9, i=9}
其他答案中未提及的另一个选项是使用 associate*
函数,该函数采用参数集合,它将把对放入:
val result = (1..9).associateWithTo(mutableMapOf()) { 9 }
与 .associateWith { ... }.toMutableMap()
不同,这不会复制集合。
如果您需要使用不同的实现(例如 HashMap()
),您可以将其传递给此函数,例如 .associateWithTo(HashMap()) { ... }
.
Kotlin 标准库中的许多集合处理函数都遵循这种模式,并有一个带有附加参数的对应函数,用于接受将放置结果的集合。例如:map
和 mapTo
、filter
和 filterTo
、associate
和 associateTo
。
我想创建一个可变映射,其键落在连续范围内,并且使用 Kotlin 在一行中初始将值设置为相同的值 9。怎么做?
您可以使用以下方式:
import java.util.*
fun main(args: Array<String>) {
val a :Int = 0
val b :Int = 7
val myMap = mutableMapOf<IntRange, Int>()
myMap[a..b] = 9
myMap.toMap()
println(myMap) //Output: {0..7=9}
}
如果你指的是值,你可以在任何 Map / MutableMap 上使用 withDefault
函数:
fun main() {
val map = mutableMapOf<String, Int>().withDefault { 9 }
map["hello"] = 5
println(map.getValue("hello"))
println(map.getValue("test"))
}
您可以尝试以下方法:
val map = object : HashMap<Int, Int>() {
init {
(1..10).forEach {
put(it, 9)
}
}
}
println(map)
我会使用 associateWith:
val map = (1..9).associateWith { 9 }.toMutableMap()
println(map) // {1=9, 2=9, 3=9, 4=9, 5=9, 6=9, 7=9, 8=9, 9=9}
它也可以与其他类型一起用作键,例如 Char:
val map = ('a'..'z').associateWith { 9 }.toMutableMap()
println(map) // {a=9, b=9, c=9, d=9, e=9, f=9, g=9, h=9, i=9}
其他答案中未提及的另一个选项是使用 associate*
函数,该函数采用参数集合,它将把对放入:
val result = (1..9).associateWithTo(mutableMapOf()) { 9 }
与 .associateWith { ... }.toMutableMap()
不同,这不会复制集合。
如果您需要使用不同的实现(例如 HashMap()
),您可以将其传递给此函数,例如 .associateWithTo(HashMap()) { ... }
.
Kotlin 标准库中的许多集合处理函数都遵循这种模式,并有一个带有附加参数的对应函数,用于接受将放置结果的集合。例如:map
和 mapTo
、filter
和 filterTo
、associate
和 associateTo
。