Рубин 1.8:Hash#сортировка возвращает не хэш, а массив (лучший способ сделать это?)

StackOverflow https://stackoverflow.com/questions/489139

  •  20-08-2019
  •  | 
  •  

Вопрос

В каком-то сценарии 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's no longer a hash!
sorted_by_values.keys.join ',' 

мой обходной путь - создать метод to_hash для класса массива.

class Array
  def to_hash(&block)
    Hash[*self.collect { |k, v|
      [k, v]
    }.flatten]
  end
end

Затем я могу сделать следующее:

sorted_by_values.to_hash.keys.join ','

Есть ли лучший способ сделать это?

Это было полезно?

Решение

Хэши неупорядочены по определению.Не может быть такого понятия, как отсортированный хэш.Вероятно, лучше всего извлечь ключи из отсортированного массива с помощью collect, а затем выполнить объединение результатов

sortedByValues = foo.sort {|a, b| a[1] <==> b[1]}
sortedByValues.collect { |a| a[0] }.join ','
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top