作者:君莫笑 | 来源:互联网 | 2023-01-01 18:40
我试图做Clojure但坚持使用嵌套的hashmap.我有这样的结构:
{:type "view"
children: [
{:type "view"
:id "123"}
{:type "view"
:children [
{:type "view"}]}]}
现在我想:id
用随机字符串向每个hashmap 添加字段(如果不存在).得到这样的东西:
{:type "view"
:id "43434"
children: [
{:type "view"
:id "123"}
{:type "view"
:id "456"
:children [
{:type "view"
:id "5656"}]}]}
Taylor Wood..
8
你可以clojure.walk/postwalk
这样做:
(walk/postwalk
(fn [v]
(if (and (map? v) (nil? (:id v)))
(assoc v :id (str (rand-int 9999)))
v))
data)
=>
{:type "view"
:id "3086"
:children [{:type "view"
:id "123"}
{:type "view"
:id "8243"
:children [{:type "view" :id "3222"}]}]}
... data
输入地图在哪里?postwalk
遍历您的嵌套映射,并在没有一个映射的每个映射上assoc
处理一个:id
键(一个随机整数字符串).
1> Taylor Wood..:
你可以clojure.walk/postwalk
这样做:
(walk/postwalk
(fn [v]
(if (and (map? v) (nil? (:id v)))
(assoc v :id (str (rand-int 9999)))
v))
data)
=>
{:type "view"
:id "3086"
:children [{:type "view"
:id "123"}
{:type "view"
:id "8243"
:children [{:type "view" :id "3222"}]}]}
... data
输入地图在哪里?postwalk
遍历您的嵌套映射,并在没有一个映射的每个映射上assoc
处理一个:id
键(一个随机整数字符串).