MutableMap.put în Kotlin

Adaugă o cheie cu valoarea ei sau înlocuiește valoarea unei chei existente; putAll copiază toate intrările altui map.

Sintaxă
fun put(cheie: K, valoare: V): V?
operator fun <K, V> MutableMap<K, V>.set(cheie: K, valoare: V)   // map[cheie] = valoare
fun putAll(alt: Map<out K, V>)
operator fun <K, V> MutableMap<in K, in V>.plusAssign(alt: Map<K, V>)   // map += alt

Ce face MutableMap.put

put(k, v) pune valoarea v la cheia k. Dacă cheia exista, valoarea veche este înlocuită și put o întoarce; dacă nu exista, întoarce null. Forma obișnuită în Kotlin este map[k] = v, care face același lucru fără să întoarcă nimic.

putAll(alt) copiază toate intrările din alt map (sau dintr-o listă de perechi). La chei comune câștigă valorile din alt. Operatorul += pe un MutableMap face același lucru.

Funcționează doar pe MutableMap (creat cu mutableMapOf, hashMapOf etc.).

Parametri

Parametru Descriere
cheie / valoare Intrarea de adăugat sau de actualizat.
alt La putAll: map-ul (sau perechile) de copiat.

Ce returnează

put: valoarea veche sau null. putAll și map[k] = v: nimic.

Exemple

Exemplul 1: Adăugare și actualizare

Prima operație adaugă „ouă” (valoare veche null). A doua schimbă prețul laptelui și întoarce prețul vechi.

fun main() {
    val preturi = mutableMapOf("pâine" to 4.5, "lapte" to 7.0)
    println(preturi.put("ouă", 12.9))
    println(preturi.put("lapte", 7.5))
    preturi["unt"] = 9.9
    println(preturi)
}

Rezultat

null
7.0
{pâine=4.5, lapte=7.5, ouă=12.9, unt=9.9}

Exemplul 2: putAll și +=

Lista nouă de prețuri suprascrie pâinea și adaugă mierea. Apoi += adaugă încă o intrare.

fun main() {
    val preturi = mutableMapOf("pâine" to 4.5, "lapte" to 7.0)
    val actualizari = mapOf("pâine" to 5.0, "miere" to 30.0)
    preturi.putAll(actualizari)
    println(preturi)
    preturi += "cafea" to 25.0
    println(preturi)
}

Rezultat

{pâine=5.0, lapte=7.0, miere=30.0}
{pâine=5.0, lapte=7.0, miere=30.0, cafea=25.0}

Exemplul 3: Numărarea cu put

Pentru fiecare cuvânt citim numărul de până acum (sau 0) și punem valoarea mărită. Ordinea cheilor este cea a primei apariții.

fun main() {
    val text = "ana are mere ana are pere"
    val frecventa = mutableMapOf<String, Int>()
    for (cuv in text.split(" ")) {
        frecventa[cuv] = (frecventa[cuv] ?: 0) + 1
    }
    println(frecventa)
}

Rezultat

{ana=2, are=2, mere=1, pere=1}

Greșeli frecvente

  • Apelezi put sau map[k] = v pe un map creat cu mapOf: nu compilează. Folosește mutableMapOf.
  • Te aștepți ca put pe o cheie existentă să păstreze ambele valori: un map are o singură valoare pe cheie. Pentru mai multe valori, folosește un Map<K, MutableList<V>> cu getOrPut.

Comenzi înrudite

  • MutableMap.remove: Șterge o cheie (și valoarea ei) din map și întoarce valoarea ștearsă sau null dacă cheia nu exista.
  • MutableMap.getOrPut: Întoarce valoarea cheii; dacă lipsește, o calculează cu lambda, o salvează în map și o întoarce.
  • MutableMap.merge: Pune valoarea dacă cheia lipsește; dacă există, o combină cu cea veche folosind funcția dată (de exemplu adunare).
  • Map.plus: Operatorii + și – pe map-uri: creează un map nou cu intrări adăugate sau cu chei scoase, fără să schimbe originalul.
  • mapOf: Creează un map (dicționar cheie → valoare) din perechi scrise cu „to”; mutableMapOf dă unul pe care îl poți modifica.