我有一个定义:
(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])
时,我会得到最后一个哈希图。我相信你必须做一些事情,比如在每个哈希映射上运行一个函数,一次一个,然后每次将该向量放到另一个向量中以获得我正在寻找的表单。
非常感谢任何帮助
答案 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
c
和c
。如果您希望地图包含引用它的所有地图:
(def class1 {:people '({:name "John" :age "25"} {:name "Harry" :age "23"} {:name "Peter" :age "24"})})
要从此地图中提取所需的值,您可以使用:
(mapv (juxt :name :age) (:people class1))