Clojure set 和 hash-set 返回无序值

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)

有什么解释吗?

Dar*_*ylG 5

Set 返回集合的唯一元素。集合中的元素是无序的,这意味着不保证元素的特定顺序(参见https://clojuredocs.org/clojure.core/set)。

如果您想要特定的排序,请使用 sorted-set ( https://clojuredocs.org/clojure.core/sorted-set )。

由于您的示例中有不同类型的元素(即字符串和数字),您必须指定一个比较器来定义排序,因此您需要使用 sorted-set-by ( https://clojuredocs.org/clojure.核心/排序依据)。