访问Ruby(1.9)哈希中的最后一个键值对

dav*_*ers 21 ruby hash key-value

从Ruby 1.9开始,哈希保留了非常酷的插入顺序.我想知道访问最后一个键值对的最佳方法.

我写了一些代码来做到这一点:

hash.values.last
Run Code Online (Sandbox Code Playgroud)

这很容易理解,但也许可以直接访问最后一个值,而不是通过中介(值数组).是吗?

Dan*_*ayo 22

哈希有一个"第一"方法,但是在数组模式下返回第一对,最后,你可以尝试:

my_hash.to_a.last
Run Code Online (Sandbox Code Playgroud)

这在数组模式中返回最后一对,如"第一种方法"


sja*_*agr 20

我正在使用的另一种选择:

hash[hash.keys.last]
Run Code Online (Sandbox Code Playgroud)

当你想直接将值分配给哈希的最后一个元素时,效果会更好:

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>'
Run Code Online (Sandbox Code Playgroud)

  • 这是一个很棒的解决方案! (3认同)

Ben*_*Lee 10

什么都没有,没有.但如果你如此倾向,你可以修补一个(当然通常不推荐):

class Hash
  def last_value
    values.last
  end
end
Run Code Online (Sandbox Code Playgroud)

然后:

hash.last_value
Run Code Online (Sandbox Code Playgroud)