You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 22:48:01