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

时间:2016-11-30 12:29:29

标签: clojure

我有一个定义:

(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})

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

的矢量
[["John" "25"]
 ["Harry" "23"]
 ["Peter" "24"]]

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

如果我再拨打(into [] (map (-> class1 :people) [:name :age])) 然后我得到结果[“彼得”“24”]

我需要做的是在另外两个哈希映射上再次运行into函数,然后将3个结果放入向量中,但我不知道如何执行此操作。

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

非常感谢任何帮助

1 个答案:

答案 0 :(得分:6)

(def class1 {:people ({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})

class1定义为地图:

{:people {:name "Peter" :age "24"}}

因为(a b c)表单的列表会在评估a之前依次评估b cc。如果您希望地图包含引用它的所有地图:

(def class1 {:people '({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})

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

(mapv (juxt :name :age) (:people class1))