Есть ли способ получить N-й ключ или значение упорядоченного хэша, кроме преобразования его в массив?

В Ruby 1.9.x У меня есть хэш, который сохраняет свой порядок

hsh = {9=>2, 8=>3, 5=>2, 4=>2, 2=>1}

Есть ли способ получить ключ третьего элемента, кроме этого:

hsh.to_a[2][0]

Ответ 1

Попробуйте использовать Hash#keys и Hash#values:

thirdKey = hsh.keys[2]
thirdValue = hsh.values[2]

Ответ 2

Почему вы используете хеш вместо массива? Массив идеально подходит для упорядоченных коллекций.

array = [[9, 2], [8, 3], [5, 2], [4, 2], [2, 1]]
array.each { |pair| puts pair.first }

Сортировка массивов очень проста, в конечном счете.

disordered_array = [[4,2], [9,2], [8,3], [2,1], [5,2]] 
disordered_array.sort { |a,b| b <=> a }
=> [[9, 2], [8, 3], [5, 2], [4, 2], [2, 1]]

Исправьте меня, если я ошибаюсь.