我在 Clojure 中有以下数据结构:
(def test-data [{:year 2023
:quarter 1
:month 1
:week 1
:date (jt/local-date 2023 1 2)
:name "Name1"
:value 5}
{:year 2023
:quarter 1
:month 1
:week 1
:date (jt/local-date 2023 1 2)
:name "Name2"
:value 3}])
Run Code Online (Sandbox Code Playgroud)
现在我想按不同的关键字动态地对该数据集进行分组(例如:按年、周和名称或按年、月和名称或仅按名称)。
我尝试使用一些结构来实现这一点,例如:
(defn group-year-week-name [group-keys rows]
(let [group-keys-set (set group-keys)]
(map (fn [[grp-key values]] {(keyword (first grp-key)) (first grp-key)
...
:value-sums (reduce (+ :value values))
:values values
})
(group-by (juxt :week :year) rows))))
Run Code Online (Sandbox Code Playgroud)
但这不起作用,也不是真正动态的(首先参见......)。
关于这个有什么提示吗?
更新(提供更多输入):
使用调用“动态”分组函数的不同参数预计会得到以下结果。
group-year-week
{:year 2023 :month 1 :value-sums 8}
group-year-name
[{:year 2023 :name "Name1" :value-sums 5 :values [list of values]}
{:year 2023 :name "Name2" :value-sums 3 :values [list of values}]
Run Code Online (Sandbox Code Playgroud)
你的意思只是:
(defn group-by-keys [group-keys rows]
(group-by (apply juxt group-keys) rows))
Run Code Online (Sandbox Code Playgroud)
然后你可以像这样调用它:
(group-by-keys [:week :year] test-data)
Run Code Online (Sandbox Code Playgroud)
这将产生与您的示例相同的结果。
| 归档时间: |
|
| 查看次数: |
122 次 |
| 最近记录: |