我有以下地图.并给出性别参数,需要在没有最多钱的情况下提取用户.怎么做?
{:user1 {:money 400 :sex :male}
:user2 {:money 300 :sex :female}
:user3 {:money 200 :sex :male}
}
Run Code Online (Sandbox Code Playgroud)
你可以使用max-key:
(defn richest-by-sex [users s]
(apply max-key (comp :money second) (filter (fn [[n v]] (= s (:sex v))) users)))
Run Code Online (Sandbox Code Playgroud)
这是你可以写它的一种方式(感谢@Lee的使用想法max-key!):
(defn richest [sex users]
(apply max-key (comp :money val) (filter (comp #{sex} :sex val) users)))
Run Code Online (Sandbox Code Playgroud)
因此,您首先筛选出不符合您标准的所有用户.对于每个条目users,您获取val该条目的内容,然后获取其:sex下的值,然后检查该结果是否包含在包含的单元素集中sex.
然后,一旦您筛选出您不想要的用户,您将查看生成的条目序列.对于每个条目,您再次获取val条目,然后获取其:money下的值,最后返回为该查询提供最高结果的项目.
例子:
(def users {:user1 {:money 400 :sex :male}
:user2 {:money 300 :sex :female}
:user3 {:money 200 :sex :male}})
(richest :male users)
;=> [:user1 {:money 400, :sex :male}]
(richest :female users)
;=> [:user2 {:money 300, :sex :female}]
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
84 次 |
| 最近记录: |