我一直试图将向量内的映射的嵌套值映射为向量的向量,但没有成功。
我的数据是这样的:
[{:country {:name "chile", :id 1},
:subcountries [{:name "talca", :id 2}
{:name "concepcion", :id 3}
{:name "puerto montt", :id 4}]}
{:country {:name "united states", :id 5},
:subcountries [{:name "boston", :id 6}
{:name "texas", :id 7}]}]
虽然我一直在玩的代码模糊地返回了我想要得到的结果的近似值:
(map
(fn [x]
(let [{{id :id name :name} :country
subcountries :subcountries} x]
[id
name
(map (fn [y] (let [{yid :id yname :yname} y] [yid yname])))]))
data)
我收到的结果有点奇怪,因为我想要的向量只是一个函数:
([1 "chile" #function[clojure.core/map/fn--5862]]
[5 "united states" #function[clojure.core/map/fn--5862]])
我在做什么错?
预期的输出应类似于:
[[["chile" 1] ["talca" 2] ["concepcion" 3] ["puerto montt" 4]]
[["united states" 5] ["boston" 6] ["texas" 7]]]
之所以在矢量输出中看到该函数,是因为您的内部map
没有将该函数应用于任何数据结构,因此它正在返回换能器。
这里我已经更新了内部map
以将函数映射到子国家,我认为这是您的意图。 (还有一个很小的错字,您用的是yname :yname
而不是yname :name
)
(defn f [data]
(map
(fn [x]
(let [{{id :id name :name} :country
subcountries :subcountries} x]
[id
name
(map (fn [y] (let [{yid :id yname :name} y] [yid yname])) subcountries)]))
data))
> (f data)
([1 "chile" ([2 "talca"] [3 "concepcion"] [4 "puerto montt"])]
[5 "united states" ([6 "boston"] [7 "texas"])])