Доступ к последней паре ключ-значение в хэше Ruby (1.9) - PullRequest
20 голосов
/ 13 октября 2011

Начиная с Ruby 1.9, хэши сохраняют порядок вставки, что очень круто. Я хочу знать, как лучше всего получить доступ к последней паре ключ-значение.

Я написал код, который делает это:

hash.values.last

Это работает и очень легко понять, но, возможно, возможно получить доступ к последнему значению напрямую, а не через посредника (массив значений). Это так?

Ответы [ 4 ]

21 голосов
/ 05 февраля 2014

У хэша есть «первый» метод, но который возвращает первую пару в режиме массива, для последнего вы можете попробовать:

my_hash.to_a.last

это возвращает последнюю пару в режиме массива, как "первый метод"

18 голосов
/ 21 июля 2015

Еще одна альтернатива, которую я использую сам:

hash[hash.keys.last]

, которая работает лучше, когда вы хотите напрямую присвоить значение последнему элементу хэша:

2.4.1 :001 > hash = {foo: 'bar'}
 => {:foo=>"bar"} 
2.4.1 :002 > hash[hash.keys.last] = 'baz'
 => "baz" 
2.4.1 :003 > hash.values.last = 'bar'
NoMethodError: undefined method `last=' for ["baz"]:Array
Did you mean?  last
    from (irb):3
    from /home/schuylr/.rvm/rubies/ruby-2.4.1/bin/irb:11:in `<main>'
9 голосов
/ 13 октября 2011

Ничего встроенного нет. Но вы могли бы подлатать одну, если бы вы были так склонны (конечно, обычно это не рекомендуется):

class Hash
  def last_value
    values.last
  end
end

А потом:

hash.last_value
2 голосов
/ 27 апреля 2015

Я только что сделал это для очень большого хэша:

hash.reverse_each.with_index do |(_, value), index|
  break value if (index == 0)
end
...