studio google example maps kotlin

google - Cómo trabajar con Maps en Kotlin



kotlin map example (4)

El método más en el Map crea un nuevo mapa que contiene la nueva entrada. No muta el mapa original. Si desea utilizar este método, deberá hacer esto:

fun main (args: Array<String>){ val table = nameTable.plus(Pair("person1", example)) for (entry in table) { println(entry.value.age) } }

Si desea agregar la entrada al mapa original, necesita usar el método put como en Java.

Esto funcionaría:

fun main (args: Array<String>){ nameTable.put("person1", example) for (entry in nameTable) { println(entry.value.age) } }

Para obtener y eliminar entradas de MutableMap , puede usar esto:

nameTable["person1"] // Syntactic sugar for nameTable.get("person1") nameTable.remove("person1")

El código a continuación crea un nuevo mapa llamado nameTable , luego le agrega una entrada con el nombre de ejemplo y luego intenta imprimir la propiedad del nombre del valor.

Cuando lo ejecuto, parece que la operación más no agregó una nueva entrada al mapa como pensé que lo haría.

Entonces, ¿qué estoy haciendo mal?

class Person(name1: String, lastName1: String, age1: Int){ var name: String = name1 var lastName: String = lastName1 var age: Int = age1 } var nameTable: MutableMap<String, Person> = mutableMapOf() var example = Person("Josh", "Cohen", 24) fun main (args: Array<String>){ nameTable.plus(Pair("person1", example)) for(entry in nameTable){ println(entry.value.age) } }

Mientras estamos en ello, me encantarían algunos ejemplos de cómo agregar, eliminar y obtener una entrada de un mapa.


El motivo de su confusión es que plus no es un operador mutante, lo que significa que funciona en el Map (solo lectura), pero no cambia la instancia en sí. Esta es la firma:

operator fun <K, V> Map<out K, V>.plus(pair: Pair<K, V>): Map<K, V>

Lo que desea es un set operadores mutantes, definido en MutableMap :

operator fun <K, V> MutableMap<K, V>.set(key: K, value: V)

Entonces, su código puede ser reescrito (con algunas mejoras adicionales):

class Person(var name: String, var lastName: String, var age: Int) val nameTable = mutableMapOf<String, Person>() val example = Person("Josh", "Cohen", 24) fun main (args: Array<String>) { nameTable["person1"] = example for((key, value) in nameTable){ println(value.age) } }


Es demasiado problema, puede asignar valores directamente, de esta manera:

@Test @Throws(Exception::class) fun main(){ val map:MutableMap<String,Person> = mutableMapOf() map["Josh"]= Person("Josh", "Cohen", 24) map.forEach { t, u -> println("map key:$t,map value:${u.toString()}") } } class Person(name1:String, lastName1:String, age1:Int){ var name:String = name1 var lastName:String = lastName1 var age:Int = age1 override fun toString(): String { return "name:$name,lastNam:$lastName,age:$age /n" } }


Tienes que usar

poner

método.

class Person(name1:String, lastName1:String, age1:Int){ var name:String = name1 var lastName:String = lastName1 var age:Int = age1 } var nameTable:MutableMap<String, Person> = mutableMapOf() var example = Person("Josh", "Cohen", 24) fun main (args: Array<String>){ nameTable.put("person1", example) for(entry in nameTable){ println(entry.value.age) } }