如何使用元素或不使用元素构建哈希集(取决于条件)?

时间:2013-01-23 20:06:20

标签: clojure

我正在尝试这个:

(hash-set (when (= a 1) x))

如果#{x}等于a,我期待1,否则为空集#{}。但我得到#{nil}而不是任何空集。如何重写声明?

PS。解决方法,但它看起来很难看:

(filter #(not (nil? %)) (hash-set (when (= a 1) x)))

解决方案:

(apply hash-set (when (= a 1) (list x)))

3 个答案:

答案 0 :(得分:1)

您可以使用:

(apply hash-set (when (= a 1) x))

我假设a和x是变量,例如通过:

(defn foo [a & x] (apply hash-set (when (= a 1) x)))

我将参数x设为可选,因为如果不等于1,则不需要提供参数。

答案 1 :(得分:1)

另一种方式:

(into #{} (when (= a 1) [x]))

如果您喜欢代码中的单词hash-set,则可以执行以下操作:

(apply hash-set (when (= a 1) [x]))

答案 2 :(得分:0)

你可以这样做:

(if (= a 1) #{x} #{})