如何将doseq返回的值放在clojure中的向量中

neh*_*eha 1 dictionary vector clojure

我是Clojure的新手.我有一张地图矢量:

(def vecmap [{:a "hello"} {:a "hi"} {:a "hey"}])
Run Code Online (Sandbox Code Playgroud)

基本上我想检查地图矢量中是否存在给定值.我用过这个:

(doseq [r vecmap] (get-in r [:a]))
Run Code Online (Sandbox Code Playgroud)

这将获得关键的所有价值:a.但后来我想将所有这些值放在一个向量中,以便我可以使用contains检查向量中是否存在给定值?我怎么能在Clojure中做到这一点?

noi*_*ith 5

doseq回报nil.期.它无法返回任何其他值.

如果要为顺序输入中的每个项生成值,请for接受与doseq相同的语法,并返回lazyseq而不是nil.

+user=> (def vecmap [{:a "hello"} {:a  "hi"} {:a  "hey"}])
#'user/vecmap
+user=> (for [r vecmap] (get-in r [:a]))
("hello" "hi" "hey")
Run Code Online (Sandbox Code Playgroud)

此外,如果您特别想知道给定键是否在向量中具有非零值,some则为该任务创建内置:

+user=> (some :a vecmap)
"hello"
Run Code Online (Sandbox Code Playgroud)