Согласно Википедии :
В датском и норвежском алфавитах присутствуют те же дополнительные гласные, что и в шведском (см. Ниже), но в другом порядке и сразные символы (..., X, Y, Z, Æ, Ø, Å).Кроме того, «Aa» сопоставляется как эквивалент «Å».Датский алфавит традиционно рассматривал букву "W" как вариант буквы "V", но сегодня буква "W" считается отдельной буквой. "
Это исключит сортировку.
Сделайте это, чтобы решить проблему:
names = %w(Aarhus Aalborg Assens)
names.sort_by { |w| w.gsub('Aa', 'Å') } # => ["Assens", "Aalborg", "Aarhus"]
и что-то подобное для других букв, у которых есть составные комбинации символов для преобразования в один символ.
Причина, по которой это работает, sort_by
делает Преобразование Шварца , так что это на самом деле сортировка по возвращаемому значению, возвращенному из блока, который, в данном случае, является именем с «Aa», замененным на «Å». Замена является временной и отбрасывается, когдамассив отсортирован.
sort_by
очень мощный, но имеет некоторые издержки. Для простой сортировки вы должны использовать sort
, потому что он быстрее. Для сортировок, где вы сравниваете два простых значения весли вы используете sort
или sort_by
. Если вам нужно делать более сложные вычисления или копаться в объекте, тогда sort_by
можетРоув, чтобы быть быстрее.Нет точного и быстрого способа узнать, что лучше, поэтому я настоятельно рекомендую тестировать с помощью эталонного теста, если вам нужно сортировать большие массивы или иметь дело с объектами, потому что разница может быть большой, а иногда sort
можетбудь лучшим выбором.
РЕДАКТИРОВАТЬ:
Руби сама по себе не собирается делать то, что вы хотите, потому что она не знает порядка сортировки каждого установленного там символа.Существует обсуждение относительно включения ICU IBM , которое объясняет, почему это так.Если вы хотите способности ICU, вы можете посмотреть ICU4R .Я не играл с этим, но это звучит как ваше единственное реальное решение в Ruby.
Возможно, вы сможете что-то сделать с базой данных, такой как Postgres.Они поддерживают различные параметры сортировки, но обычно вынуждают вас объявлять параметры сортировки при создании базы данных ... или, может быть, это когда таблица создается ... прошло много времени с тех пор, как я создал новую таблицу.Во всяком случае, это был бы вариант, хотя это было бы боль.