Devo estrarre una chiave da una mappa usando un valore. C'è un modo per farlo se non implementare la ricerca inversa da solo?ricerca inversa in una mappa
risposta
Prova
(some #(if (= (val %) your-val) (key %)) your-map)
È possibile invertire una mappa molto facilmente con una funzione 2-line:
(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: per tutti gli scopi intensivi, ciò che la mappa '{: a 1: b 1}' diventa non è definito. – Jeremy
@Jeremy: non è strettamente indefinito, si otterrà in modo affidabile una ricerca inversa di '{1: a}' o '{1: b}' (quale si ottiene dipende dall'ordinamento interno dell'hashmap). Ma sono d'accordo sul fatto che se hai valori duplicati, probabilmente vuoi dare a questo un trattamento speciale. – mikera
Sì. Intendevo solo che non si poteva fare affidamento. Inoltre, le mappe di piccole dimensioni che sono PersistentArrayMaps possono avere un comportamento * prevedibile * (non necessariamente previsto) fino a quando non vengono forzate in PersistentHashMap. Ma ancora una volta, non è qualcosa su cui ci si dovrebbe basare. – Jeremy
Un altro:
(defn reverse-map [m]
(apply hash-map (mapcat reverse m)))
(defn reverse-lookup [m k]
(ffirst (filter (comp #{k} second) m)))
Credo che map-invert
è il diritto modo per farlo.
;; 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.
Se si utilizza ClojureScript o avete bisogno di un altro alternativa :)
(zipmap (vals m) (keys m))
se si desidera mantenere le chiavi, è meglio invertire solo la mappa , ma colleziona le vecchie chiavi in un set/elenco ecc ...
(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. Efficace Enum in Kotlin con ricerca inversa?
- 2. Ricerca IP inversa con PHP
- 3. ricerca inversa grep con contesto
- 4. Ricerca inversa Django di ForeignKey
- 5. Ricerca inversa di url_for in Flask
- 6. Ricerca del valore minimo in una mappa
- 7. Mappa della compilazione e valori della mappa inversa
- 8. API di ricerca personalizzata di Google - Ricerca inversa di immagini
- 9. Ricerca inversa immagine Google con richiesta POST
- 10. Redis, scadenza sessione e ricerca inversa
- 11. Mappa maiuscole-maiuscole nella scheda inversa in Vim
- 12. Come fare ricerca URL inversa in applicazione riutilizzabile Django namespace
- 13. Ricerca dei valori n più alti in una mappa
- 14. Ricerca mappa Efficienza di TestForNull
- 15. Inversa di una matrice in SymPy?
- 16. È necessario eseguire una ricerca DNS inversa di un particolare indirizzo IP in java
- 17. Come disabilitare la ricerca DNS inversa DNS di Java
- 18. Django: prefetch_related() segue la ricerca inversa delle relazioni?
- 19. Impossibile eseguire la ricerca DNS inversa su Android
- 20. Funzione inversa in Scala
- 21. Ricerca immagini Google: come si costruisce un URL di ricerca immagine inversa?
- 22. Ricerca una mappa con limite superiore e limite inferiore
- 23. Inversa del quale
- 24. Riproduzione video inversa in OpenCV
- 25. La ricerca mappa è in Elixir O (1)?
- 26. Come ottenere una stringa inversa (unicode safe)
- 27. Riflessione inversa?
- 28. Riproduzione video inversa in iOS
- 29. Pretty-print una mappa in Java
- 30. Perché "[:: - 1]" restituisce una lista inversa in Python?
Cosa ho f 2 o più chiavi hanno lo stesso valore? Ne hai bisogno solo uno o tutti? – ivant