阵列图的地图嵌套向量

问题描述 投票:0回答:1

我一直试图将向量内的映射的嵌套值映射为向量的向量,但没有成功。

我的数据是这样的:

[{: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]]]
clojure clojurescript
1个回答
0
投票

之所以在矢量输出中看到该函数,是因为您的内部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"])])
© www.soinside.com 2019 - 2024. All rights reserved.