这是我多次遇到的情况,但没有找到惯用的方法...
假设有人想使用自定义的self-pred
函数来过滤序列。此self-pred
函数为不需要的元素返回nil
,并为所需元素返回有用的信息。希望保留这些所需元素的评估self-pred
值。
我的一般解决方案是:
;; self-pred is a pred function which returns valuable info
;; in general, they are unique and can be used as key
(let [new-seq (filter self-pred aseq)]
(zipmap (map self-pred new-seq) new-seq))
基本上,对所有需要的元素调用
self-pred
两次。我觉得好丑想知道是否有更好的方法。非常感谢任何输入!
最佳答案
我使用这种代码段:
(keep #(some->> % self-pred (vector %)) data)
像这样:
user> (keep #(some->> % rseq (vector %)) [[1 2] [] [3 4]])
;;=> ([[1 2] (2 1)] [[3 4] (4 3)])
或者,如果您想要更详细的结果:
user> (keep #(some->> % rseq (hash-map :data % :result)) [[1 2] [] [3 4]])
;;=> ({:result (2 1), :data [1 2]} {:result (4 3), :data [3 4]})
关于clojure - 如何过滤序列并保留评估的pred值?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/47325664/