【发布时间】:2020-07-27 15:34:17
【问题描述】:
我解决了一个问题,它需要获取哈希的最后一个键值对。示例:
hash = { "aa" => { :count => 1, :width => 333 }, "bb" => { :count => 1, :width => 77 } }
我需要结果
result = [ "bb" => { :count => 1, :width => 77 } ]
哈希有第一种方法
hash.first
=> [ "aa" => { :count => 1, :width => 333 } ]
我想使用last方法,但是出现错误
NoMethodError: undefined method `last' for #<Hash:0x00007f82c75a9988>
from (pry):19:in `__pry__'
这是我的解决方案
result = [hash.stringify_keys.keys[1], hash.stringify_keys.values[1]]
我的问题是为什么 Ruby 哈希没有最后一个方法。
【问题讨论】:
-
试试
hash.to_a.last -
更好的实现是
[ { hash.keys.last => hash[hash.keys.last] } ]。可以提高一些效率(不必多次调用#keys),但这适用于任何大小的哈希。 -
哈希(理论上)是无序的,尽管有时底层实现是有序的。这是无法保证的,因此使用 Hash#last 方法没有意义。
-
@ToddA.Jacobs:在 Ruby 中,它被指定(我认为从 Ruby 1.8 左右开始),以插入顺序维护哈希。
-
@user1934428,将其设为 1.9。
标签: ruby