Ruby从哈希表中弹出一个元素?
我正在查看,似乎没有Ruby从哈希表中弹出一个元素?,ruby,Ruby,我正在查看,似乎没有pop方法?我想我错过了一些东西 if (x = d['a']) != nil d.delete('a') end 如果您知道密钥,只需直接使用delete 如果散列不包含密钥,则返回nil,否则将获得存储在那里的内容 从您链接到的文档: h = { "a" => 100, "b" => 200 } h.delete("a") #=> 100 h.delete("z")
pop
方法?我想我错过了一些东西
if (x = d['a']) != nil
d.delete('a')
end
如果您知道密钥,只需直接使用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"
还有一个shift,它删除并返回一个键值对:
hsh = Hash.new
hsh['bb'] = 42
hsh['aa'] = 23
hsh['cc'] = 65
p hsh.shift
=> ["bb", 42]
可以看出,散列的顺序是插入顺序,而不是键或值。从医生那里
散列按插入相应键的顺序枚举它们的值
你的问题是什么?真的没有更好的方法从散列中弹出项目吗?有什么理由我不必担心吗?(我不熟悉Ruby是如何编译的,所以我不知道缺少单一方法是否与Python中的方法一样重要)。您指的是
pop()
方法,它通常意味着从集合中删除(并返回)最后一个元素。不过,您的示例代码似乎并没有这样做。你具体想采取什么行动?@MichaelBerkowski我的代码做的正是pop
做的。欢迎您尝试。@user3467349 Ok-您的代码执行python的pop
所执行的操作,而不是Ruby的Array\pop
所执行的操作,也不是典型有序结构中的pop()
所执行的操作,即从堆栈中弹出顶部元素。Python的Ruby名称是Hash#delete
。问题中的代码与d.delete('a')完全相同,因此我不确定您想做什么。是的,我没有意识到delete
返回了一个值。从方法名称来看,这并不完全明显。还有一种shift,它的行为有点像数组中的pop,在数组中它删除并返回一对键值,这与shift
和first
的行为类似,它只是返回它遇到的第一对key-val
对,还是哈希表实际上是以某种方式排序的?简而言之,哈希的行为类似于数组,即first/shift返回第一次插入的元素,但编写依赖于它的代码是不好的。哈希的顺序是一个实现细节。您的代码变得不那么清晰,在某些Ruby实现中甚至可能表现出不同的行为。如果您希望项目按特定顺序排列,请使用数组或显式排序。有关更多详细信息,请参阅。