首页 > 解决方案 > 如何在 Clojure 中计算列表交集?

问题描述

我需要一个函数,它需要两个列表,例如 (1 2 3 4) 和 (2 3 4 5),并返回它们的交集,即 (2 3 4)。我编写了一个有效的函数,但它有 8 行长,而且非常“不像 Clojure”,因为我对这项运动很陌生。我知道那里有一些优雅的东西,地狱,甚至可能是解决整个问题的 Clojure 关键字。比较只需要在顶层进行,而不是在整个列表结构中递归。先感谢您。

标签: listclojureintersection

解决方案


如果您不介意结果集的顺序,则可以使用内置库进行集合操作。

(require '[clojure.set :as set])
(set/intersection (set '(1 2 3 4) ) (set '( 3 4 5)))   ; ==> returns #{4 3}

推荐阅读