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)
}
}