new*_*ple 11 clojure sortedset
在Clojure中,该set函数自动将a vector或lista 转换为a 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)}
Run Code Online (Sandbox Code Playgroud)
这是我提出的解决方案:
(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}
Run Code Online (Sandbox Code Playgroud)
没有eval,有更好/更惯用的方法吗?
kot*_*rak 18
into 在这种情况下也非常有用.
user=> (into (sorted-set) [3 1 2])
#{1 2 3}
Run Code Online (Sandbox Code Playgroud)
你可以使用apply这个:
user=> (apply sorted-set [3 1 2])
#{1 2 3}
Run Code Online (Sandbox Code Playgroud)