Clojure:使用Lazy Sequence中的特定值提取地图

时间:2017-10-30 10:40:17

标签: clojure lazy-sequences

我有一个Clojure Lazy Sequence:

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

我想获取具有给定密钥的特定值的地图,例如我希望所有值为"TestVal"的地图都为:keyTwo值,因此我希望结果中包含第一个和第三个元素。

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

1 个答案:

答案 0 :(得分:5)

{{: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)

它并不关心输入序列是懒惰还是非懒惰(渴望)。