gpt4 book ai didi

clojure - 合并 map 而不覆盖键

转载 作者:行者123 更新时间:2023-12-02 18:41:52 25 4
gpt4 key购买 nike

我有一个 clojure 函数,它返回一系列 1 键映射。我想将这些 map 合并为一张 map ;但是,如果存在具有相同键的映射,我不想覆盖这些值,只想将它们组合成一个向量。 merge 似乎覆盖了,而 merge-with 似乎严重扭曲了类型。

我有:

({:foo "hello"}
{:bar "world"}
{:baz "!!!"}
{:ball {:a "abc", :b "123"}}
{:ball {:a "def", :b "456"}}
{:ball {:a "ghi", :b "789"}})

我想要:

{:foo "hello"
:bar "world"
:baz "!!!"
:ball [{:a "abc", :b "123"} {:a "def", :b "456"} {:a "ghi", :b "789"}]}

谢谢。

最佳答案

(def data ...) ;; your list of maps

(apply merge-with (comp flatten vector) data)
;; => {:baz "!!!", :ball ({:b "123", :a "abc"} {:b "456", :a "def"} {:b "789", :a "ghi"}), :bar "world", :foo "hello"}

注意:使用展平适用于OP的情况,但不是在创建属于冲突键的值向量时合并 map 的通用方法。

关于clojure - 合并 map 而不覆盖键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26639048/

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