Clojure:从惰性序列中提取具有特定值的映射
我有一个Clojure惰性序列:Clojure:从惰性序列中提取具有特定值的映射,clojure,lazy-sequences,Clojure,Lazy Sequences,我有一个Clojure惰性序列: { {:keyOne 123, :keyTwo "TestVal"} {:keyOne 456, :keyTwo "Value2"} {:keyOne 789, :keyTwo "TestVal"} } 我想要得到给定键具有特定值的映射,例如,我想要所有具有值“TestVal”的映射作为:keytoo值,因此我期望结果中的第一个和第三个元素 我假设我应该能够使用过滤器解决这个问题,但是我已经浏览了所有我能找到的示例,它们从来没有使用过这
{
{:keyOne 123, :keyTwo "TestVal"}
{:keyOne 456, :keyTwo "Value2"}
{:keyOne 789, :keyTwo "TestVal"}
}
我想要得到给定键具有特定值的映射,例如,我想要所有具有值“TestVal”
的映射作为:keytoo
值,因此我期望结果中的第一个和第三个元素
我假设我应该能够使用过滤器解决这个问题,但是我已经浏览了所有我能找到的示例,它们从来没有使用过这样的嵌套结构
{{: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)
它不在乎输入序列是否懒惰(渴望)。map identity
非常奇怪。没有必要强迫输入是惰性的:任何适用于惰性序列的东西都应该适用于渴望序列,包括您编写的代码。您的注释是准确的。将渴望序列视为懒惰序列是毫无意义的。我将修改我的答案,使之更加实际和准确。