我无法在Clojure中找到内置功能,以按键的值过滤地图列表。例如,我们有一个下面的列表:通过Clojure中的键值过滤地图列表的简单方法
user=> (def animals (list {:name "Charlie" :weight 350 :specie :elephant}
{:name "Vasya" :weight 250 :specie :bear}
{:name "John" :weight 200 :specie :elephant}
{:name "Monk" :weight 200 :specie :monkey}))
#'user/animals
我要选择,例如,所有的:specie
与价值:elephant
。我怎样才能做到这一点?我发现的最佳方法是:
user=> (defn filter-data [data m]
(let [k (keys m) v (vals m)]
(filter #(= (map % k) v) data)))
#'user/filter-data
user=> (clojure.pprint/print-table (filter-data animals {:specie :elephant}))
| :name | :weight | :specie |
|---------+---------+-----------|
| Charlie | 350 | :elephant |
| John | 200 | :elephant |
nil
有没有更好的方法来做到这一点?
你应该改一下你的问题做出更清楚你想要的功能,接收的地图,比如'{:种类:大象'',否则可能会认为你只是想用一个简单的谓词进行过滤。 – Setzer22
如果要在地图中添加更多绑定键/值,您的功能就可以了 –