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

如何在Clojure循环的case语句中生成统一复合Map结构

解决Clojure生成GA4复合过滤规则的问题

核心思路

把循环生成的单个过滤规则批量收集,再根据业务需求包裹进andGroup或orGroup结构——GA4规则中,andGroup下所有规则需同时满足,orGroup下规则满足任意一个即可。

示例实现

1. 单个规则生成函数

保留原有case逻辑生成单维度过滤规则:

(defn generate-single-filter [dimension value]
  (case dimension
    "country" {:filterType "INCLUDE"
               :field "country"
               :stringFilter {:matchType "EXACT" :value value}}
    "deviceCategory" {:filterType "INCLUDE"
                      :field "deviceCategory"
                      :stringFilter {:matchType "EXACT" :value value}}
    "source" {:filterType "EXCLUDE"
              :field "source"
              :stringFilter {:matchType "CONTAINS" :value value}}))

2. 批量生成复合过滤结构

用map收集所有规则,再按需求组合成AND/OR分组:

(defn generate-complex-filter [rules group-type]
  (let [filters (map #(apply generate-single-filter %) rules)]
    (case group-type
      :and {:andGroup {:filters filters}}
      :or {:orGroup {:filters filters}})))

;; 示例调用
(def sample-rules [["country" "US"] ["deviceCategory" "mobile"] ["source" "google"]])

;; 生成AND组合规则
(generate-complex-filter sample-rules :and)

;; 生成OR组合规则
(generate-complex-filter sample-rules :or)

3. 嵌套组合(AND包含OR)

如果需要多层嵌套,比如部分规则先做OR组合,再和其他规则做AND组合,直接嵌套构造即可:

(def nested-filter
  {:andGroup {:filters [(generate-single-filter "country" "US")
                        {:orGroup {:filters [(generate-single-filter "deviceCategory" "mobile")
                                             (generate-single-filter "deviceCategory" "tablet")]}}]}})

预期输出示例

调用(generate-complex-filter sample-rules :and)会得到如下结构:

{:andGroup {:filters [{:filterType "INCLUDE"
                       :field "country"
                       :stringFilter {:matchType "EXACT" :value "US"}}
                      {:filterType "INCLUDE"
                       :field "deviceCategory"
                       :stringFilter {:matchType "EXACT" :value "mobile"}}
                      {:filterType "EXCLUDE"
                       :field "source"
                       :stringFilter {:matchType "CONTAINS" :value "google"}}]}}

内容的提问来源于stack exchange,提问作者Deepak Kishore

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:10:18