如何在 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 函数:

(Playground)

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 标准库中的许多集合处理函数都遵循这种模式,并有一个带有附加参数的对应函数,用于接受将放置结果的集合。例如:mapmapTofilterfilterToassociateassociateTo