7
저는 새로운 clojure 프로그래머입니다.Clojure 값으로지도 키 가져 오기
감안할 때...
{:foo "bar"}
는 값 "바"와 키의 이름을 검색 할 수있는 방법이 있습니까?
지도를 살펴본 결과 키와 값 또는 값만 검색하는 방법을 볼 수 있지만 키는 검색 할 수 없습니다. 도움말 감사!
저는 새로운 clojure 프로그래머입니다.Clojure 값으로지도 키 가져 오기
감안할 때...
{:foo "bar"}
는 값 "바"와 키의 이름을 검색 할 수있는 방법이 있습니까?
지도를 살펴본 결과 키와 값 또는 값만 검색하는 방법을 볼 수 있지만 키는 검색 할 수 없습니다. 도움말 감사!
값이 "bar"인 키/값 쌍이 여러 개있을 수 있습니다. 값은 조회와 달리 키와는 달리 해시되지 않습니다. 키의 배열을 반환합니다
(def hm {:foo "bar"})
(keep #(when (= (val %) "bar")
(key %)) hm)
또는
(filter (comp #{"bar"} hm) (keys hm))
또는
(reduce-kv (fn [acc k v]
(if (= v "bar")
(conj acc k)
acc))
#{} hm)
: 당신이 달성하려는 작업에 따라 같은 선형 알고리즘과 키를 찾아 볼 수 있습니다 . 당신이 당신의 애송이들이다가 서로 별개 알고 있다면, 당신은 또한
(clojure.set/map-invert hm)
user> (->> {:a "bar" :b "foo" :c "bar" :d "baz"} ; initial map
(group-by val) ; sorted into a new map based on value of each key
(#(get % "bar")) ; extract the entries that had value "bar"
(map key)) ; get the keys that had value bar
(:a :c)
물론 함께 역방향 조회 해시 맵을 만들 수 있지만, 일반적으로 데이터 구조가 거꾸로 의미합니다. – delnan
그래서 ... http://stackoverflow.com/questions/15595986/swap-keys-and-values-in-a-map? –
정확히 무엇을하고 있는지에 따라 달라집니다 (지도를 만드는 코드를 변경하거나 양방향이 필요할 수 있음).하지만 직감은 다음과 같습니다. 예. – delnan