【问题标题】:Getting values from nested maps从嵌套映射中获取值
【发布时间】:2013-12-05 08:21:11
【问题描述】:

我有一个嵌套地图,我怎样才能获得所有 :kvota 关键字的值?结果应该是 - 5.8,3.2,2.25。我尝试使用选择键但没有任何运气......

{:b4f0d011-31a2-4be3-bb8d-037725310207 {:tiket {:3 {:id 13, :par Porto - Zenit, :igra 2, :kvota 5.8}, :2 {:id 12, :par Celtic - Ajax, :igra x, :kvota 3.2}, :1 {:id 11, :par Arsenal - Dortmund, :igra 1, :kvota 2.25}}}}

【问题讨论】:

    标签: clojure


    【解决方案1】:

    这将获取与数据结构中任何位置的每个:kvota 对应的值。

    ;; Data in quesiton doesn't read as-is, so this is altered slightly.
    (def data
      {:b4f0d011-31a2-4be3-bb8d-037725310207
       {:tiket
        {:1 {:kvota 2.25, :par "Arsenal - Dortmund", :igra 1, :id 11}
         :3 {:kvota 5.8, :par "Porto - Zenit", :igra 2, :id 13}
         :2 {:kvota 3.2, :par "Celtic - Ajax", :igra "x", :id 12}}}})
    
    (keep :kvota (tree-seq map? vals data)) ; (2.25 5.8 3.2)
    

    【讨论】:

    • 优秀的答案!我从没想过以这种方式使用tree-seq。顺便说一句,(remove nil? (map f ...))(keep f ...) 是一样的。
    • @OmriBernstein keep - 好主意。我已经做出改变了。谢谢!
    • 正是我需要的。
    猜你喜欢
    • 1970-01-01
    • 2012-04-27
    • 1970-01-01
    • 1970-01-01
    • 2017-12-11
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 2021-08-05
    相关资源
    最近更新 更多