Tengo que extraer una clave de un mapa utilizando un valor. ¿Hay alguna manera de hacer esto aparte de implementar la búsqueda inversa?búsqueda inversa en un mapa
Respuesta
Trate
(some #(if (= (val %) your-val) (key %)) your-map)
Puede invertir un mapa muy fácilmente con una función de 2 líneas:
(defn reverse-map [m]
(into {} (map (fn [[a b]] [b a]) m)))
(def a {:a 1 :b 2 :c 3})
(reverse-map a)
=> {1 :a, 3 :c, 2 :b}
((reverse-map a) 1)
=> :a
Nota: Para todos los propósitos intensivos, lo que el mapa '{: a 1: b 1}' pasa a ser no está definido. – Jeremy
@Jeremy: no está estrictamente indefinido, de manera confiable obtendrá una búsqueda inversa de '{1: a}' o '{1: b}' (la que obtenga depende del orden interno del hashmap). Pero estoy de acuerdo en que si tienes valores duplicados, probablemente quieras darle un tratamiento especial. – mikera
Sí. Lo único que quería decir es que no se debe confiar en eso. Además, los pequeños mapas que son PersistentArrayMaps pueden tener un comportamiento * predecible * (no necesariamente esperado) hasta que se los fuerce en un PersistentHashMap. Pero, de nuevo, no es algo en lo que se deba confiar. – Jeremy
Otra:
(defn reverse-map [m]
(apply hash-map (mapcat reverse m)))
(defn reverse-lookup [m k]
(ffirst (filter (comp #{k} second) m)))
Creo que map-invert
es el derecho forma de hacer esto.
;; Despite being in clojure.set, this has nothing to do with sets.
user=> (map-invert {:a 1, :b 2})
{2 :b, 1 :a}
;; If there are duplicate keys, one is chosen:
user=> (map-invert {:a 1, :b 1})
{1 :b}
;; I suspect it'd be unwise to depend on which key survives the clash.
Si está utilizando ClojureScript o necesita una alternativa más :)
(zipmap (vals m) (keys m))
si desea guardar las llaves, es mejor simplemente invertir el mapa , pero recoge las llaves antiguas en un conjunto/lista, etc. ...
(defn map-inverse [m]
(reduce (fn [m' [k v]] (update m' v clojure.set/union #{k})) {} m))
(defn map-inverse [m]
(reduce (fn [m' [k v]] (update m' v conj k)) {} m))
- 1. Búsqueda en C++ inversa
- 2. ZSH Bindkey Búsqueda inversa
- 3. búsqueda inversa Django por ForeignKey
- 4. ¿Mejores prácticas de búsqueda inversa?
- 5. Pregunta de búsqueda hash inversa
- 6. Búsqueda de diccionario inversa en Python
- 7. Búsqueda de IP inversa con PHP
- 8. Delphi - Búsqueda inversa 'que incluye esta unidad'
- 9. JCombo Autocompletar - Patrón de búsqueda inversa o
- 10. No se puede hacer la búsqueda DNS inversa en Android
- 11. Cómo hacer búsqueda URL inversa en aplicación reutilizable Django namespaced
- 12. Cómo deshabilitar la búsqueda DNS DNS inversa de Java
- 13. de búsqueda hacia atrás imposible con una referencia inversa
- 14. Mapa Hash optimizado para la búsqueda
- 15. Numpy de búsqueda (Mapa o punto)
- 16. Búsqueda de imágenes de Google: ¿cómo puedo construir una URL de búsqueda de imágenes inversa?
- 17. Buscar DNS inversa en Perl
- 18. Geocodificación inversa para obtener un nombre de empresa real
- 19. use KML, búsqueda de dirección, instrucciones y 'compartir mapa' en el mismo mapa
- 20. Iteración sobre un vector en dirección inversa
- 21. Desestructurar un mapa en otro mapa?
- 22. Cadena inversa en Python
- 23. función inversa en Scala
- 24. objeto inversa en jQuery.each
- 25. búsqueda e inserción en un mapa con 3 elementos en C++
- 26. ¿Por qué inserta caracteres de control en mi búfer de búsqueda interactiva inversa?
- 27. Búsqueda de hash/diccionario/mapa con expresiones regulares
- 28. Necesito realizar una búsqueda DNS inversa de una dirección IP particular en java
- 29. Ingeniería inversa?
- 30. Código de geocodificación inversa
Lo que i f 2 o más teclas tienen el mismo valor? ¿Necesitas solo uno de ellos, o todos? – ivant