Как я могу отсортировать числа, как если бы они были словами? - PullRequest
3 голосов
/ 21 января 2011

Ruby's Array#sort по умолчанию будет сортировать числа в следующем порядке:

[11, 12, 13, 112, 113, 124, 125, 127]

Я бы хотел отсортировать массив чисел, как это, как если бы они были словами в алфавитном порядке:

[11, 112, 113, 12, 124, 125, 127, 13]

Как я могу это сделать? (В конце концов, я хочу сделать это с помощью хэш-ключей, так что если вы хотите ответить таким образом, это нормально.) Кроме того, есть ли название для этого типа сортировки?

Ответы [ 3 ]

7 голосов
/ 21 января 2011

Вы все crqzy))) У меня есть такое решение:

a.sort_by &:to_s
2 голосов
/ 21 января 2011

Ну, один из способов - преобразовать все значения в строки, а затем преобразовать их обратно.

a = [11, 12, 13, 112, 113, 124, 125, 127]
a = a.map(&:to_s).sort.map(&:to_i)
p a # => [11, 112, 113, 12, 124, 125, 127, 13]
1 голос
/ 21 января 2011

Вы можете передать блок для сортировки, которая принимает два аргумента и возвращает результат вашей собственной пользовательской функции сравнения.Пример должен говорить сам за себя, но если у вас есть какие-либо вопросы, не стесняйтесь их задавать.

a = [11, 112, 113, 12, 124, 125, 127, 13]
new_a = a.sort do |x,y|
  "%{x}" <=> "%{y}"
end
puts new_a

Примечание: я подозреваю, что причина, по которой вы ищете такое решение, заключается в том, что объекты, которые выхочу отсортировать не Integer с сердцем.Это может быть полезным и семантически более приятным для подкласса Integer.Хотя это, очевидно, усложнит инстанцирование, оно кажется более правильным, по крайней мере для меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...