将地图值与clojure进行比较

时间:2017-07-03 19:03:30

标签: clojure

我需要过滤地图,但过滤器应该将值与前一个值进行比较,过滤后的地图应该只包含与之前信号不同的值。

这是一个例子:

Map to filter: {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
Return: {:key3 -20 :key5 10}

我怎么能这样做呢?

1 个答案:

答案 0 :(得分:2)

我可能会使用partition-by根据序列何时更改值来对序列进行分块。我们可以告诉partition-by查看" signum"的值,然后只取每个块中的第一个结果。

(->> {:key1 100 :key2 10 :key3 -20 :key4 -10 :key5 10}
     (partition-by #(Integer/signum (val %)))
     rest
     (map first))

=> ([:key3 -20] [:key5 10])