我正在尝试根据哈希值是否在字段中具有特定值来从哈希矢量中检索整个哈希值。
(def foo {:a 1, :b 2})
(def bar {:a 3, :b 4})
(def baz [foo bar])
在baz
中,我想将整个哈希值返回到:a 3
,结果将是{:a 3, :b 4}
。我尝试了get
get-in
和find
,但这些依赖于密钥而不返回整个哈希。我也尝试了this question的一些建议,但他们也没有返回哈希。
答案 0 :(得分:2)
hello.core> (def foo {:a 1, :b 2})
#'hello.core/foo
hello.core> (def bar {:a 3, :b 4})
#'hello.core/bar
hello.core> (def baz [foo bar])
#'hello.core/baz
hello.core> (filter #(= (:a %) 3) baz)
({:a 3, :b 4})
#(= (:a %) 3)
是一个简短形式,用于创建一个匿名,它接受一个名为%
的参数,在该参数中,它将查找键:a
,如果匹配值3,则返回true通过此测试的向量baz
中的任何条目都将使其成为输出。
PS:关于发音的注释:该数据结构通常称为“地图”,因为它将一个键映射到一个值。这非常令人困惑,因为还有一个名为map
的函数,它通过函数更改序列的每个成员。
答案 1 :(得分:2)
filter
肯定能像Arthur提到的那样完成工作。仅仅为了完整起见,这些是另外两个与filter
:
(some #(when (= 3 (:a %)) %) baz)
(first (drop-while #(not= 3 (:a %)) baz))