Сортировка латинских строк в Clojure

Я сделал этот эксперимент в REPL:

(sort ["maa" "ácw" "ijl" "aez" "jkl"])

Я получил это:

("aez" "ijl" "jkl" "maa" "ácw")

Правильный ответ таков:

("ácw" "aez" "ijl" "jkl" "maa")

Есть ли способ отсортировать латинские строки в Clojure изначально? Если нет, то почему?

Посмотрите, я не спрашивал, как сортировать это, я знаю, что могу передать seq через трубу и заменить символы без ANSI.

1 ответ

Вы можете использовать класс Collator в REPL:

=> (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")

В этом примере я использую бразильский Locale. Вам нужно изменить этот язык на тот, который вы хотите использовать. Список поддерживаемых локалей здесь.

licensed under cc by-sa 3.0 with attribution.