Cómo incrementar el valor de una clave determinada con sólo un mapa de búsqueda?

Martin Drozdík:

Decir que tengo un mapa:

 var inventory = mutableMapOf("apples" to 1, "oranges" to 2)

y quiero incrementar el número de manzanas por uno.

Sin embargo esto no funciona:

inventory["apples"]!!++ // Error:(9, 4) Variable expected

Esto tampoco:

var apples = inventory["apples"]!!
++apples
println(inventory["apples"]) // prints "1" => the value was not incremented.

Lo cual es sorprendente, ya que en Kotlin, los números están en caja cuando se almacenan en las instancias de objetos genéricos . Yo no esperaría que se está haciendo una copia.

Parece que la única manera de hacerlo es hacer algo como:

var apples = inventory["apples"]!!
++apples
inventory["apples"] = apples
println(inventory["apples"]) 

¿Qué tanto utiliza dos búsquedas en el mapa y es muy feo y muy largo.

¿Hay una manera de incrementar un valor de una clave dada usando sólo una de búsqueda?

Además, podría alguien explicar por qué los dos primeros métodos no funcionan?

simulante:

No hay manera para incrementar el valor con una sola gety sin una put. Siempre hay que hacer un putdespués, porque Intes inmutable. El inc()método ( ++es un atajo para eso) devuelve un nuevo valor que necesitan ser almacenados en el mapa. No cambia el valor almacenado.

Puedes usar

inventory.computeIfPresent("apples") { _, v -> v + 1 }

Escribirlo en una sola línea, pero si nos fijamos en la ejecución sino que también le hará un get()después calcular el nuevo valor y hacer un put()después. Para que pueda guardar una línea de código que tiene que escribir, pero no guardará los ciclos de CPU en tiempo de ejecución.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=223148&siteId=1
Recomendado
Clasificación