将函数应用于散列映射的多个值并将结果返回到数组中

rbb*_*rbb 1 clojure

我有一个定义:

(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)

我想要的结果是一个看起来像的矢量

[["John" "25"]
 ["Harry" "23"]
 ["Peter" "24"]]
Run Code Online (Sandbox Code Playgroud)

如果我打电话(map (-> class1 :people) [:name :age]) 然后我得到结果("彼得""24").为什么我只从最后一个hashmap而不是其他hashmap获取值?

如果我然后打电话(into [] (map (-> class1 :people) [:name :age])) 然后我得到结果["彼得""24"]

我需要做的是into在另外两个哈希映射上再次运行该函数,然后将3个结果放入向量中,但我不知道如何做到这一点.

我的问题是,当我运行时(map (-> class1 :people) [:name :age]),我得到最后一个哈希图.我相信你必须做一些事情,比如在每个哈希映射上运行一个函数,一次一个,然后每次将该向量放到另一个向量中以获得我正在寻找的表单.

任何帮助将非常感激

Lee*_*Lee 6

(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)

定义class1为地图:

{:people {:name "Peter" :age "24"}}
Run Code Online (Sandbox Code Playgroud)

因为形式的列表,(a b c)评估a bc反过来评估之前c.如果您希望地图包含引用它的所有地图:

(def class1 {:people '({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
Run Code Online (Sandbox Code Playgroud)

要从此地图中提取所需的值,您可以使用:

(mapv (juxt :name :age) (:people class1))
Run Code Online (Sandbox Code Playgroud)