如何在Clojure中将列表或向量转换为有序集?

时间:2012-02-27 09:26:11

标签: clojure sortedset

在Clojure中,set函数会自动将vectorlist转换为set。但sorted-set

并非如此
(set [3 2 1])  ; #{1 2 3}
(set '(3 2 1)) ; #{1 2 3}
(sorted-set [3 2 1])  ; #{[3 2 1]}
(sorted-set '(3 2 1)) ; #{(3 2 1)}

这是我提出的解决方案:

(defn sorted-set-from-coll [coll]
    (eval (cons sorted-set (seq coll))))

(def v [3 2 1])
(sorted-set-from-coll v)        ; #{1 2 3}
(sorted-set-from-coll '(3 2 1)) ; #{1 2 3}
(sorted-set-from-coll [3 1 2])  ; #{1 2 3}

如果没有eval,是否有更好/更惯用的方法?

2 个答案:

答案 0 :(得分:18)

在这种情况下,

into也非常有用。

user=> (into (sorted-set) [3 1 2])
#{1 2 3}

答案 1 :(得分:9)

您可以使用apply

user=> (apply sorted-set [3 1 2])
#{1 2 3}