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

发布于 2024-12-09 07:48:53 字数 175 浏览 0 评论 0原文

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

我已经编写了一些执行此操作的代码:

hash.values.last

这有效并且非常容易理解,但也许可以直接访问最后一个值,而不是通过中介(值数组)。是吗?

As of Ruby 1.9, hashes retain insertion order which is very cool. I want to know the best way to access the last key–value pair.

I've written some code which does this:

hash.values.last

This works and is very easy to comprehend, but perhaps it's possible to access the last value directly, rather that via an intermediary (the array of values). Is it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

等风来 2024-12-16 07:48:53

哈希有一个“第一个”方法,但它返回数组模式下的第一对,最后,你可以尝试:

my_hash.to_a.last

这返回数组模式下的最后一对,就像“第一个方法”

Hash have a "first" method, but that return the first pair in array mode, for last, you can try:

my_hash.to_a.last

this return last pair in array mode like "first method"

待"谢繁草 2024-12-16 07:48:53

我自己使用的另一种选择:

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>'

One more alternative that I'm using myself:

hash[hash.keys.last]

which works out better when you want to directly assign a value onto the last element of the hash:

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>'
尝蛊 2024-12-16 07:48:53

没有内置任何东西,没有。但如果你愿意的话,你可以猴子修补一个(当然通常不推荐):

class Hash
  def last_value
    values.last
  end
end

然后:

hash.last_value

Nothing built in, no. But you could monkey-patch one if you were so inclined (not usually recommended, of course):

class Hash
  def last_value
    values.last
  end
end

And then:

hash.last_value
撩动你心 2024-12-16 07:48:53

我只是对一个非常大的哈希值执行此操作:

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

I just did this for a very large hash:

hash.reverse_each.with_index do |(_, value), index|
  break value if (index == 0)
end
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文