这是我多次遇到的情景,但没有找到适合它的惯用方法......
假设有人想使用自定义self-pred函数来过滤seq.此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))
Run Code Online (Sandbox Code Playgroud)
基本上,它是self-pred在所有想要的元素上调用两次.我觉得它太丑了......
不知道有没有更好的方法.非常感谢任何输入!
在这些场景中,您可以使用keep,但您必须更改"谓词"功能以返回所需的完整信息,或者nil每个项目.
例如:
(keep (fn [item]
(when-let [tested (some-test item)]
(assoc item :test-output tested))) aseq)
Run Code Online (Sandbox Code Playgroud)