【问题标题】:Extract values from vector of maps conditionally in clojure在clojure中有条件地从地图向量中提取值
【发布时间】:2016-03-16 10:12:02
【问题描述】:

此代码从地图向量中提取所有值。

(def vector-of-maps [{:a "1" :b "2"}{:a "3" :b "4"}])
(mapcat vals vector-of-maps)

所以我明白了 ("1" "2" "3" "4")

我只想从 :a 获取值来获取 ("1" "3")

我可以用什么方法呢?

【问题讨论】:

    标签: clojure


    【解决方案1】:
    (def vector-of-maps [{:a "1" :b "2"} {:a "3" :b "4"}])
    (map :a vector-of-maps)
    

    产量

    ("1" "3")
    

    map 将应用:a 作为一个函数,该函数将从vector-of-maps 中的每个值中提取值。

    【讨论】:

    • 嘿,这会教我在我清醒 15 分钟后回答问题。 :P
    【解决方案2】:

    你可以这样做:

    (map val (filter (comp #{:a} key) (apply concat vector-of-maps)))
    

    解释:

    1. apply concat 将一系列映射转换为来自所有这些映射的所有键值对的序列
    2. filter (comp #{:a} key) 仅保留其键在单元素集合 #{:a} 中的键值对
    3. map val 从每个剩余的键值对中获取值

    例子:

    (def vector-of-maps [{:a "1" :b "2"} {:a "3" :b "4"}])
    
    (map val (filter (comp #{:a} key) (apply concat vector-of-maps)))
    ;=> ("1" "3")
    

    【讨论】:

    • 非常感谢您的详细解答!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-09-09
    • 2020-09-09
    • 2020-05-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多