Część rzeczy mógłbym posortować po stronie bazy danych, ale w postgresql LC_COLLATE można ustawić tylko i wyłącznie przy tworzeniu clustera, a że nie mam na tym serwerze roota i są tam też inne bazy, to wywalenie klastera, stworzenie nowego i odtworzenie baz danych może być problematyczne.
Oprócz tego jest też kilka miejsc, w których dane nie siedzą w bazie, albo są już po obrobieniu w ruby, więc i tak się przyda jakiś gem ;]
Pomimo obsługi różnych kodowań znaków w Ruby 1.9, ciągi sortowane są tak jakby były binarne, tj.
["Łotwa", "Polska"].sort
#=>["Polska", "Łotwa"]
Na pierwszy rzut oka wygląda to na spore niedociągnięcie. Po wgłębieniu się w temat okazuje się jednak, że kolejność znaków alfabetu ściśle zależy od języka. Te same znaki mogą mieć różne pozycje w alfabecie: http://en.wiktionary.org/wiki/å
[quote]Å, å - the last letter of the Danish alphabet
Å, å - the third to last letter of the Finnish alphabet
Å, å - the last letter of the Norwegian alphabet
Å, å - the third to last letter of the Swedish alphabet[/quote]
Generalnie problem jest dużo bardziej złożony niż może się wydawać - wypadałoby, żeby każdy string oprócz kodowania miał też przypisany język. Funkcja alphabetical_sort musiałaby pobierać jakiś dodatkowy argument. Ludzie są mistrzami w utrudnianiu sobie życia :-).
no to jak nie ma rozwiazania to moze cos na nizszym poziomie, tylko wolne bedzie na pewno
zapisac te dane do zmiennej, pliku -> wykorzystac jakies polecenie wbudowane w linuxa, nawet sort da rade jak jest utf8 ustawione prawidlowo, czy jakie kolwiek inne narzedzie -> odczytanie tych danych. Tylko wydajnosc strasznie ucierpi
gotar@laptop ~/Tmp $ cat a.txt
Łotwa
Polska
Belga
Białoruś
Dania
Mandżuria
gotar@laptop ~/Tmp $ cat a.txt | sort
Belga
Białoruś
Dania
Łotwa
Mandżuria
Polska
gotar@laptop ~/Tmp $