代码之家  ›  专栏  ›  技术社区  ›  Jdv

Clojure:从延迟序列中提取具有特定值的映射

  •  2
  • Jdv  · 技术社区  · 8 年前

    我有一个Clojure Lazy序列:

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

    我想得到对于给定键具有特定值的映射,例如,我想要所有具有该值的映射 "TestVal" :keyTwo 值,所以我期望结果中的第一个和第三个元素。

    filter ,但我浏览了所有可以找到的示例,它们从未使用过这样的嵌套结构。

    1 回复  |  直到 8 年前
        1
  •  5
  •   naoki fujita    8 年前
    {{: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)
    

    它不在乎输入序列是否懒惰(渴望)。

    推荐文章