Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.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_Loops_If Statement_Hash_Return - Fatal编程技术网

为及;在ruby中迭代哈希时,每个循环在第一次匹配后停止

为及;在ruby中迭代哈希时,每个循环在第一次匹配后停止,ruby,loops,if-statement,hash,return,Ruby,Loops,If Statement,Hash,Return,我试图打印出一个散列值,其中它们对应的键匹配某个条件(如果它们是奇数) 我遇到了一个问题,导致我的循环在之后停止工作 以下代码仅返回第一个匹配值 if mycondition for key,value in myhash do if key.odd? return "#{value}" end end end 在阅读了其他一些问题后,我认为return是我的问题,但是当我取出它时,代码返回整个哈希值,而不是一个匹配值 if mycondition for key,

我试图打印出一个散列值,其中它们对应的键匹配某个条件(如果它们是奇数)

我遇到了一个问题,导致我的循环在之后停止工作

以下代码仅返回第一个匹配值

if mycondition
 for key,value in myhash do
   if key.odd?
     return "#{value}"
   end
 end
end
在阅读了其他一些问题后,我认为
return
是我的问题,但是当我取出它时,代码返回整个哈希值,而不是一个匹配值

if mycondition
 for key,value in myhash do
   if key.odd?
     return "#{value}"
   end
 end
end

有人知道会发生什么事吗

这是一种更加Ruby的方法:

myhash.select do |key, value|
  key.odd?
end.values
在这里,它查找所有奇数键并返回相关值

您的
返回的问题是强制整个方法立即退出。如果您习惯使用JavaScript,可能会有点困惑,因为您不仅仅是在退出
do

值得注意的是,Ruby中很少使用
for
构造。表达原始代码的一种更为传统的方式是:

myhash.each do |key, value|
  # ...
end

这是一种更加Ruby的方法:

myhash.select do |key, value|
  key.odd?
end.values
在这里,它查找所有奇数键并返回相关值

您的
返回的问题是强制整个方法立即退出。如果您习惯使用JavaScript,可能会有点困惑,因为您不仅仅是在退出
do

值得注意的是,Ruby中很少使用
for
构造。表达原始代码的一种更为传统的方式是:

myhash.each do |key, value|
  # ...
end

一旦
返回
,函数就结束了,因此您只能得到一个键

如果不
返回
任何内容,函数将返回其最终表达式,在本例中为
for
循环
for
循环的计算结果与您循环的内容(
myhash
)相同,因此,删除
返回值
会为您带来一切

在您的情况下,您需要建立您想要返回的物品列表,并返回整个列表:

if mycondition
  ret = []
  for key, value in myhash do
    if key.odd?
      ret << [key, value]
    end
  end
  return Hash[ret]
end

一旦
返回
,函数就结束了,因此您只能得到一个键

如果不
返回
任何内容,函数将返回其最终表达式,在本例中为
for
循环
for
循环的计算结果与您循环的内容(
myhash
)相同,因此,删除
返回值
会为您带来一切

在您的情况下,您需要建立您想要返回的物品列表,并返回整个列表:

if mycondition
  ret = []
  for key, value in myhash do
    if key.odd?
      ret << [key, value]
    end
  end
  return Hash[ret]
end

比上一个例子更好:比上一个例子更好: