【问题标题】:A better way of transforming a nested clojure data structure转换嵌套 c​​lojure 数据结构的更好方法
【发布时间】:2019-04-30 10:29:06
【问题描述】:

我有一个如下所示的 clojure 映射:

{"l1" [{"name" "s1", "url" "something", "coordinates" {"latitude" 100, "longitude" 200}}
       {"name" "s2", "url" "something", "coordinates" {"latitude" 150, "longitude" 77.08472222222221}}]}

我想将String 键转换为keyword 键。这是我想要的输出:

{"l1" ({:name "s1", :url "something", :coordinates {:latitude 100, :longitude 200}}
       {:name "s2", :url "something", :coordinates {:latitude 150, :longitude 77.08472222222221}})}

这是我用于此任务的代码:

(->> _tt
     (map (fn [[k v]]
            [k (map (fn [entry]
                      (->> entry
                           (map (fn [[k v]]
                                  [(keyword k) (if (= k "coordinates")
                                                 (->> v
                                                      (map (fn [[k v]]
                                                             [(keyword k) v]))
                                                      (into {}))
                                                 v)]))
                           (into {})))
                    v)]))
     (into {}))

有没有更好的方法来做到这一点? (可能涉及拉链?)

解决方案:

(->> _tt
     (map (fn [[k v]]
            [k (clojure.walk/keywordize-keys v)]))
     (into {})))

【问题讨论】:

    标签: dictionary clojure immutability zipper


    【解决方案1】:
    (let [a {"l1" [{"name" "s1", "url" "something", "coordinates" {"latitude" 100, "longitude" 200}}
                   {"name" "s2", "url" "something", "coordinates" {"latitude" 150, "longitude" 77.08472222222221}}]}
          ]
        (clojure.walk/keywordize-keys a))
    =>
    {:l1 [{:name "s1", :url "something", :coordinates {:latitude 100, :longitude 200}}
          {:name "s2", :url "something", :coordinates {:latitude 150, :longitude 77.08472222222221}}]}
    

    【讨论】:

    • 它并没有完全给出预期的输出。但我可以从这里推断。我将使用所需的代码编辑问题。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-04-23
    • 2021-08-26
    • 2021-04-13
    • 1970-01-01
    • 2017-03-04
    • 1970-01-01
    • 2013-03-08
    相关资源
    最近更新 更多