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按值获取映射键的主要内容,如果未能解决你的问题,请参考以下文章

Clojure映射中的默认值

在 Clojure 的嵌套映射中关联多个键/值的惯用方法是啥?

无法使用 clojure 模式库在映射中使用字符串键验证值

连接数据库结果的下划线Clojure映射键

Java 8 流映射到按值排序的键列表

按值、字典、python 获取键