clojure:如何从地图中获取具有最高价值的一个项目

时间:2016-03-03 14:05:37

标签: clojure

我有以下地图。并给出性别参数,需要在没有最多钱的情况下提取用户。怎么做?

{:user1 {:money 400 :sex :male}
:user2 {:money 300 :sex :female}
:user3 {:money 200 :sex :male}
}

2 个答案:

答案 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