Ruby 1.8: Hash # sort не возвращает хеш, а массив (лучший способ сделать это?)
В некотором сценарии Ruby 1.8. Если у меня есть хеш
# k is name, v is order
foo = { "Jim" => 1, "bar" => 1, "joe" => 2}
sorted_by_values = foo.sort {|a, b| a[1] <==> b[1]}
#sorted_by_values is an array of array, it no longer a hash!
sorted_by_values.keys.join ','
Мое обходное решение - сделать метод to_hash
для класса Array.
class Array
def to_hash(&block)
Hash[*self.collect { |k, v|
[k, v]
}.flatten]
end
end
Затем я могу сделать следующее:
sorted_by_values.to_hash.keys.join ','
Есть ли лучший способ сделать это?
Ответы
Ответ 1
Хеши по определению являются неупорядоченными. Не может быть такой вещи, как отсортированный Хэш. Лучше всего, вероятно, извлечь ключи из отсортированного массива, используя коллекцию, а затем выполнить соединение в результатах
sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','