Sorted sets em Clojure
Sorted Sets são conjuntos cujos elementos são organizados automaticamente de acordo com uma função comparadora.
Por padrão, utilizam a função compare do Clojure, que aplica a “ordem natural” para números e Strings.
Podem ser criados com a função sorted-set.
(conj (sorted-set) "Bravo" "Charlie" "Sigma" "Alpha")
;; => #{"Alpha" "Bravo" "Charlie" "Sigma"}Para ordenações personalizadas, utiliza-se a função sorted-set-by junto a um comparador customizado.
No exemplo abaixo, um conjunto que ordena as palavras pelo seu comprimento.
(def comparador-tamanho
(fn [s1 s2]
(let [c1 (count s1)
c2 (count s2)]
(if (== c1 c2)
(compare s1 s2) ; Se o tamanho for igual, ordena alfabeticamente
(compare c1 c2))))) ; Caso contrário, ordena pelo tamanho
(def palavras-ordenadas
(sorted-set-by comparador-tamanho "banana" "uva" "maçã" "pera"))
;; Resultado:
;; #{"uva" "maçã" "pera" "banana"}NOTE
A função comparadora deve aceitar dois argumentos e e retornar:
- Uma número negativo se
- Zero se
- Uma número positivo se