Ruby从哈希表中弹出一个元素?

use*_*349 5 ruby

我正在看http://ruby-doc.org/core-1.9.3/Hash.html,似乎没有pop方法吗?我想我虽然想念什么...

if (x = d['a']) != nil
  d.delete('a') 
end
Run Code Online (Sandbox Code Playgroud)

Bjö*_*son 12

如果您知道密钥,如果散列不包含密钥,则直接使用 delete ,您将返回 nil,否则您将获得存储在那里的任何内容

来自您链接到的文档:

h = { "a" => 100, "b" => 200 }
h.delete("a")                              #=> 100
h.delete("z")                              #=> nil
h.delete("z") { |el| "#{el} not found" }   #=> "z not found"
Run Code Online (Sandbox Code Playgroud)

还有 shift 删除并返回一个键值对:

hsh = Hash.new

hsh['bb'] = 42
hsh['aa'] = 23
hsh['cc'] = 65

p hsh.shift

=> ["bb", 42]
Run Code Online (Sandbox Code Playgroud)

可以看出,哈希的顺序是插入的顺序,而不是键或值。从文档

哈希按照插入相应键的顺序枚举它们的值。