Sorting 在Clojure中排序拉丁字符串

Sorting 在Clojure中排序拉丁字符串,sorting,clojure,Sorting,Clojure,我在REPL中做了这个实验: (sort ["maa" "ácw" "ijl" "aez" "jkl"]) => (import java.util.Locale) java.util.Locale => (import java.text.Collator) java.text.Collator => (def collator (Collator/getInstance (Locale. "pt_BR"))) #'user/collator => (sort col

我在REPL中做了这个实验:

(sort ["maa" "ácw" "ijl" "aez" "jkl"])
=> (import java.util.Locale)
java.util.Locale
=> (import java.text.Collator)
java.text.Collator
=> (def collator (Collator/getInstance (Locale. "pt_BR")))
#'user/collator
=> (sort collator ["maa" "ácw" "ijl" "aez" "jkl"])
("ácw" "aez" "ijl" "jkl" "maa")
我明白了:

("aez" "ijl" "jkl" "maa" "ácw")
正确答案是:

("ácw" "aez" "ijl" "jkl" "maa")
有没有一种方法可以对Clojure中的拉丁字符串进行本地排序?若否,原因为何

听着,我没有问如何排序,我知道我可以通过管道传递seq并替换非ANSI字符。

您可以使用REPL上的类:

(sort ["maa" "ácw" "ijl" "aez" "jkl"])
=> (import java.util.Locale)
java.util.Locale
=> (import java.text.Collator)
java.text.Collator
=> (def collator (Collator/getInstance (Locale. "pt_BR")))
#'user/collator
=> (sort collator ["maa" "ácw" "ijl" "aez" "jkl"])
("ácw" "aez" "ijl" "jkl" "maa")

在这个例子中,我使用的是巴西人。您需要将此区域设置更改为要使用的区域设置。有一个支持的区域设置列表。

如果要排序的集合很大或性能有问题,您可以使用,它的性能应优于
Collator
。不过,它需要更多的java互操作和一些类型暗示。