gpt4 book ai didi

Clojure 按多个键分组

转载 作者:行者123 更新时间:2023-12-04 06:21:22 29 4
gpt4 key购买 nike

我在使用 group-by 时遇到问题。这是代码

(defn combine-by-coords
[values]
(let [grouped-by-x (group-by :x values)]
(persistent!
(reduce (fn [res x-val]
(assoc! res x-val (group-by :y (x-val grouped-by-x))))
(transient {})
(keys grouped-by-x)))))

map 的值的形式为

{:x 754, :y 56, :someKey "zxyf" ....} .

代码的目的是将具有相同 x 和 y 值的 map 组合在一起。首先,我使用内置的分组依据函数将 x 值分组在一起,结果是

{754 [{....}, {....}]} 

之后,我将按 y 值对键 754 的数组进行分组。但是,这是我出错的地方。似乎无法使用 key 754。这是我收到的错误:

java.lang.Integer cannot be cast to clojure.lang.IFn

我也试过使用(关键字名称)函数从中生成一个键,但这也不起作用。

有人知道这个问题的解决方案或者知道重写我的代码的方法吗?最后,我只需要将具有相同 x 和 y 的 map 组合在一起。

最佳答案

您不能像关键字一样使用数字。您必须使用 get

user=> (5 {5 :x})
#<CompilerException java.lang.ClassCastException: java.lang.Integer cannot be cast to clojure.lang.IFn (REPL:1)>
user=> ({5 :x} 5)
:x
user=> (get {5 :x} 5)
:x

在您的情况下:将 (x-val grouped-by-x)(get grouped-by-x x-val) 交换。

关于Clojure 按多个键分组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8417414/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com