0 clojure set hashset read-eval-print-loop
我最近在玩 Clojure,我在那里遇到了一些棘手的事情。
为什么:
(set [3 3 3 3 4 "Sample String"])
Run Code Online (Sandbox Code Playgroud)
在我的 REPL 中返回:
(set [3 3 3 3 4 "Sample String"])
Run Code Online (Sandbox Code Playgroud)
当它自然而然地应该返回时:
;=> #{4 3 "Sample String"}
Run Code Online (Sandbox Code Playgroud)
有什么解释吗?
Set 返回集合的唯一元素。集合中的元素是无序的,这意味着不保证元素的特定顺序(参见https://clojuredocs.org/clojure.core/set)。
如果您想要特定的排序,请使用 sorted-set ( https://clojuredocs.org/clojure.core/sorted-set )。
由于您的示例中有不同类型的元素(即字符串和数字),您必须指定一个比较器来定义排序,因此您需要使用 sorted-set-by ( https://clojuredocs.org/clojure.核心/排序依据)。