从大值到小值对向量进行排序

sorting vector from bigger to smaller values

如何将向量从大到小排序,因为这行不通

(sort > ([3 1 2 4]))

但是,使用 > 作为地图值是可行的。

(sort > (vals {:foo 5, :bar 2, :baz 10}))
; => (10 5 2)

请注意,括号在 clojure 中始终很重要,它们从不 "just group" 任意表达式。 ([3 1 2 4]) 将矢量作为函数调用,不带任何参数。

你想要(sort > [3 1 2 4])

那是因为您没有将向量传递给 sort 方法 :)

正确的行是:

(sort > [3 1 2 4])

([3 1 2 4]) 应该给你一个 ArityException,因为你试图将矢量用作不带任何参数的函数。

在您的工作示例中,您在调用 (vals {:foo 5, ...}) 的 return 值上使用 >,这是一个序列。参见 docs here for vals

排序适用于集合(参见 docs here),因此向量 [3 1 2 4] 和序列一样有效。

你的错误是你试图通过在向量周围放置方括号来 "run" 向量(记住任何 s-exp 的第一个参数是函数调用,除非它被引用为列表)。