Clojure中如何从map列表匹配指定key列表并筛选符合条件的项
实现方案
你可以先把s1的:params预处理成查找映射,避免重复遍历,再遍历s2做筛选即可,以下是两种符合需求的实现:
实现1:返回所有符合条件的参数map
(defn test->map [s1 s2] (let [;; 构建以:param值为key的查找表,提升查询效率 param-lookup (into {} (map #(vector (:param %) %)) (:params s1)))] (->> s2 (map #(get param-lookup %)) ;; 仅保留匹配存在且dtk为:date的条目 (filter #(and (some? %) (= (:dtk %) :date))))))
调用示例(传入你给出的s1和s2)返回结果:
[{:param :begin_date, :name "begin date", :dtk :date, :param_operand :single}]
实现2:兼容原有逻辑,匹配到符合条件的项就返回"done"
(defn test->map [s1 s2] (let [param-lookup (into {} (map #(vector (:param %) %)) (:params s1))] (when (some #(when-let [cfg (get param-lookup %)] (= (:dtk cfg) :date)) s2) "done")))
内容的提问来源于stack exchange,提问作者Sourab
相关产品推荐
相关产品推荐

