为及;在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
比上一个例子更好:比上一个例子更好: