freeCodeCamp/guide/spanish/clojure/hashmaps/index.md

4.6 KiB

title localeTitle
Clojure Hashmaps Hashmaps Clojure

Un hashmap es una colección que asigna claves a valores. Tienen varios nombres en otros idiomas; Python se refiere a ellos como diccionarios, y los objetos de Javascript funcionan esencialmente como hashmaps.

Un mapa hash, como muchas colecciones, puede construirse de dos maneras. Existe la función constructora:

;; Note that each argument is *prepended* to the hashmap, not appended. 
 (def a-hashmap (hash-map :a 1 :b 2 :c 3)) 
 a-hashmap 
 ; => {:c 3, :b 2, :a 1} 

También puedes definirlos usando un literal de hashmap. Esto suele ser más conciso y claro. Se recomienda usar comas para separar los pares clave / valor en los hashmaps, ya que puede aclarar los límites.

;; This hashmap is actually in the right order, unlike the one above. 
 (def another-hashmap {:a 1, :b 2, :c 3}) 
 another-hashmap 
 ; => {:a 1, :b 2, :c 3} 

Palabras clave y recuperación de valores de hashmaps.

Sostener. ¿Que es esto? :a ? :b ? :c ? Esos se ven extraños. Esas, ya ves, son palabras clave. Se llaman palabras clave porque a menudo se usan como claves en los hashmaps.

¿Por qué se usan a menudo como llaves? Bueno, a diferencia de las cadenas, las palabras clave se pueden usar como funciones para extraer valores de un hashmap; no hay necesidad de get o nth !

(def string-hashmap {"a" 1, "b" 2, "c" 3}) 
 ("a" string-hashmap) 
 ; => ClassCastException java.lang.String cannot be cast to clojure.lang.IFn 
 
 (def keyword-hashmap {:a 1, :b 2, :c 3}) 
 (:a keyword-hashmap) 
 ; => 1 
 
 ;; You can also pass a keyword a default value in case it's not found, just like get. 
 (:not-in-the-hashmap keyword-hashmap "not found!") 
 ; => "not found!" 

Convertir otras colecciones a hashmaps

Convertir a un hashmap es complicado. Para demostrarlo, intentemos usarlo como vec o seq .

(hash-map [:a 1 :b 2 :c 3]) 
 ; => IllegalArgumentException No value supplied for key: [:a 1 :b 2 :c 3] 

La hash-map cree que estamos intentando crear un hashmap con [:a 1 :b 2 :c 3] como una de las teclas. Mira lo que pasa si le damos el número correcto de argumentos:

(hash-map [:a 1 :b 2 :c 3] "foo") 
 ; => {[:a 1 :b 2 :c 3] "foo"} 

Para convertir una secuencia en un hashmap, deberá utilizar y comprender apply . Afortunadamente, esto es bastante simple: apply esencialmente destruye una colección antes de aplicarle una función.

;; These two expressions are exactly the same. 
 (+ 1 2 3) 
 ; => 6 
 (apply + [1 2 3]) 
 ; => 6 

Así es como convertirías un vector a un hashmap:

(apply hash-map [:a 1 :b 2 :c 3]) 
 ; => {:c 3, :b 2, :a 1} 
 
 ;; This is the same as: 
 (hash-map :a 1 :b 2 :c 3) 
 ; => {:c 3, :b 2, :a 1} 

:rocket: ¡IDEAe!

Actualizar un hashmap

Puedes actualizar los valores dentro de un hashmap usando assoc . Esto le permite agregar nuevos pares clave / valor o cambiar los antiguos.

(def outdated-hashmap {:a 1, :b 2, :c 3}) 
 
 (def newer-hashmap (assoc outdated-hashmap :d 4)) 
 newer-hashmap 
 ; => {:a 1, :b 2, :c 3, :d 4} 
 
 (def newest-hashmap (assoc newer-hashmap :a 22)) 
 newest-hashmap 
 ; => {:a 22, :b 2, :c 3, :d 4} 
 
 ;; Note that outdated-hashmap has not been mutated by any of this. 
 ;; Assoc is pure and functional. 
 outdated-hashmap 
 ; => {:a 1, :b 2, :c 3} 

¿Cuándo usar un hashmap?

Un hashmap es útil cuando quiere dar nombres a sus variables. Si alguna vez piensas para ti mismo, "¿Qué pasaría si usara un objeto ..." antes de que salgas de él y te des cuenta de que estás usando Clojure, intenta usar un hashmap?

También son útiles si desea asociar dos valores diferentes entre sí. Tome, por ejemplo, un cifrado ROT13: podría asociar \A con \N , \B con \M , etc. (Esto sería largo y aburrido de escribir en la mayoría de los idiomas, pero Clojure tiene algunas funciones que pueden generarlo por usted) y hazlo divertido! )

| :point_left: Anterior | :book: Casa :book: | Siguiente :point_right: |
| Vectores | Tabla de Contenidos | Para ser añadido |