gpt4 book ai didi

clojure - 如何在 Clojure 中遍历嵌套的字典/ HashMap 以自定义展平/转换我的数据结构?

转载 作者:行者123 更新时间:2023-12-02 00:46:27 25 4
gpt4 key购买 nike

我有一些看起来像这样的东西:

{:person-123 {:xxx [1 5]
:zzz [2 3 4]}
:person-456 {:yyy [6 7]}}

我想把它变成这样:

[{:person "123" :item "xxx"}
{:person "123" :item "zzz"}
{:person "456" :item "yyy"}]

这是一个类似于 flatten 的问题,我知道我可以通过调用 name 将关键字转换为字符串,但我找不到方便的方法方法来做到这一点。

我是这样做的,但它看起来不够优雅(嵌套的 for 循环,我在看你):

(require '[clojure.string :refer [split]])
(into []
(apply concat
(for [[person nested-data] input-data]
(for [[item _] nested-data]
{:person (last (split (name person) #"person-"))
:item (name item)}))))

最佳答案

你的解决方案还不错,至于嵌套for循环,for实际上支持嵌套循环,所以你可以这样写:

(vec 
(for [[person nested-data] input-data
[item _] nested-data]
{:person (last (clojure.string/split (name person) #"person-"))
:item (name item)}))

就个人而言,我倾向于专门为此目的(嵌套循环)使用 for,否则我通常更习惯使用 map 等。但这只是个人喜好。

我也非常同意@amalloy 对这个问题的评论,我会先努力让 map 结构看起来更好看。

关于clojure - 如何在 Clojure 中遍历嵌套的字典/ HashMap 以自定义展平/转换我的数据结构?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43457657/

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