Clojure按值获取映射键
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Clojure按值获取映射键相关的知识,希望对你有一定的参考价值。
我是新的Clojure程序员。
给...
{:foo "bar"}
是否有一种方法可以检索带有“ 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)
另一答案
与其他情况一样,您可以用于:
(def hm {:foo "bar"})
(for [[k v] hm :when (= v "bar")] k)
以上是关于Clojure按值获取映射键的主要内容,如果未能解决你的问题,请参考以下文章