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

Jdv*_*Jdv 2 clojure lazy-sequences

我有一个Clojure Lazy Sequence:

{
    {:keyOne 123, :keyTwo "TestVal"}
    {:keyOne 456, :keyTwo "Value2"}
    {:keyOne 789, :keyTwo "TestVal"}
}
Run Code Online (Sandbox Code Playgroud)

我想获得具有给定键的特定值的映射,例如,我想要所有具有值"TestVal"作为:keyTwo值的映射,因此我期望结果中的第一个和第三个元素.

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

nao*_*ita 5

{{:keyOne 123, :keyTwo "TestVal"}
 {:keyOne 456, :keyTwo "Value2"}
 {:keyOne 789, :keyTwo "TestVal"}}
Run Code Online (Sandbox Code Playgroud)

在clojure中,这个表达没有意义,这不是懒惰的地图序列.为了充分回答你的问题,我认为输入数据如下:

(def input '({:keyOne 123, :keyTwo "TestVal"}
             {:keyOne 456, :keyTwo "Value2"}
             {:keyOne 789, :keyTwo "TestVal"}))
Run Code Online (Sandbox Code Playgroud)

我们可以像这样表达你的目的:

(filter (fn [m] (= "TestVal" (:keyTwo m))) input)
Run Code Online (Sandbox Code Playgroud)

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

  • `map identity`很奇怪.没有必要强制输入是惰性的:任何适用于延迟序列的东西都应该适用于急切的序列,包括你编写的代码. (3认同)