我有以下地图。并给出性别参数,需要在没有最多钱的情况下提取用户。怎么做?
{:user1 {:money 400 :sex :male}
:user2 {:money 300 :sex :female}
:user3 {:money 200 :sex :male}
}
答案 0 :(得分:5)
您可以使用max-key
:
(defn richest-by-sex [users s]
(apply max-key (comp :money second) (filter (fn [[n v]] (= s (:sex v))) users)))
答案 1 :(得分:5)
以下是您可以编写它的一种方式(感谢@Lee使用max-key
的想法!):
(defn richest [sex users]
(apply max-key (comp :money val) (filter (comp #{sex} :sex val) users)))
因此,您首先筛选出不符合您标准的所有用户。对于users
中的每个条目,您获得该条目的val
,然后在其下获取:sex
的值,然后检查该结果是否包含在包含{的单元素集中{1}}。
然后,一旦您过滤掉了您不想要的用户,您就会查看生成的条目序列。对于每个条目,您再次获得条目的sex
,然后在其下获取val
的值,最后返回为该查询提供最高结果的项目。
示例:
:money