Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/22.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby从哈希表中弹出一个元素?_Ruby - Fatal编程技术网

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实现中甚至可能表现出不同的行为。如果您希望项目按特定顺序排列,请使用数组或显式排序。有关更多详细信息,请参阅。