【问题标题】:Clojure: Extract maps with specific values from Lazy SequenceClojure:从惰性序列中提取具有特定值的映射
【发布时间】:2017-10-30 10:40:16
【问题描述】:

我有一个 Clojure 惰性序列:

{
    {:keyOne 123, :keyTwo "TestVal"}
    {:keyOne 456, :keyTwo "Value2"}
    {:keyOne 789, :keyTwo "TestVal"}
}

我想获取对给定键具有特定值的映射,例如我想要所有将 "TestVal" 值作为 :keyTwo 值的地图,所以我希望结果中的第一个和第三个元素。

我认为我应该能够使用 filter 解决这个问题,但我已经查看了所有我能找到的示例,但它们从未使用过这样的嵌套结构。

【问题讨论】:

    标签: clojure lazy-sequences


    【解决方案1】:
    {{:keyOne 123, :keyTwo "TestVal"}
     {:keyOne 456, :keyTwo "Value2"}
     {:keyOne 789, :keyTwo "TestVal"}}
    

    在 clojure 中,这个表达式没有意义,这不是映射的惰性序列。 为了充分回答您的问题,我认为输入数据如下:

    (def input '({:keyOne 123, :keyTwo "TestVal"}
                 {:keyOne 456, :keyTwo "Value2"}
                 {:keyOne 789, :keyTwo "TestVal"}))
    

    我们可以为您的目的制作这样的表达式:

    (filter (fn [m] (= "TestVal" (:keyTwo m))) input)
    

    不关心输入序列是惰性还是非惰性(eager)。

    【讨论】:

    • map identity 很奇怪。没有必要强制输入惰性:任何适用于惰性序列的东西都应该适用于急切序列,包括您编写的代码。
    • 您的评论是准确的。把eager seq当成lazy seq是没有意义的。我会修改我的答案更加实用和准确。
    猜你喜欢
    • 1970-01-01
    • 2013-08-09
    • 2011-10-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多