У меня есть встречный хеш, который я пытаюсь отсортировать по количеству. Проблема, с которой я сталкиваюсь, заключается в том, что функция Hash.sort по умолчанию сортирует числа как строки, а не по размеру.
т.е. учитывая хэш:
metrics = {"sitea.com" => 745, "siteb.com" => 9, "sitec.com" => 10 }
Запуск этого кода:
metrics.sort {|a1,a2| a2[1]<=>a1[1]}
вернет отсортированный массив:
[ 'siteb.com', 9, 'sitea.com', 745, 'sitec.com', 10]
Даже если число 745 больше, чем 9, 9 появится первым в списке. Когда я пытаюсь показать, кто имеет наибольшее количество очков, это усложняет мою жизнь. :)
Любые идеи о том, как отсортировать хэш (или даже массив) по размеру числового значения?
Я ценю любую помощь.
Ответы:
Не знаю, как вы получили свои результаты, так как он не будет сортировать по строковому значению ... Вы должны обратить вспять
a1
иa2
в вашем примереЛучший способ в любом случае (согласно Младену):
Если вам нужен хеш в результате, вы можете использовать
to_h
(в Ruby 2.0+)источник
sort_by{|k,v| v}
metrics.sort_by{ |k, v| v }.reverse.to_h
Поскольку значение является последней записью, вы можете сделать:
источник
&:last
?sort_by(&:last)
фактически является сокращением дляsort_by {|x| x.last}
stackoverflow.com/questions/1217088/…Уже ответил, но все же. Измените свой код на:
Преобразованные в строки по пути или нет, это сделает работу.
источник
Это не то поведение, которое я вижу:
Возможно ли, что где-то вдоль линии ваши числа будут преобразованы в строки? Есть ли еще код, который вы не публикуете?
источник