假设我在Ruby中有这个循环。ruby中是否有each_if?
@list.each { |i|
puts i
if i > 10
break
end
}
在哪里我要遍历列表,直到满足条件。
这刺痛了我“un Ruby'ish”,既然我是Ruby的新手,有没有Ruby方法可以做到这一点?
假设我在Ruby中有这个循环。ruby中是否有each_if?
@list.each { |i|
puts i
if i > 10
break
end
}
在哪里我要遍历列表,直到满足条件。
这刺痛了我“un Ruby'ish”,既然我是Ruby的新手,有没有Ruby方法可以做到这一点?
根据您想要的结果,您可以使用Enumerable#detect
或Enumerable#take_while
。
@list.detect { |i|
puts i
i > 10
} # Returns the first element greater than 10, or nil.
正如其他人所指出的,更好的风格是首先让你的子选择,然后就可以采取行动,如:
@list.take_while{ |i| i <= 10 }.each{|i| puts i}
你可以使用take_while:
@list.take_while { |i| i <= 11 }.each { |i| puts i }
但这样你会迭代两次。有没有办法将条件传递给'each',然后只在符合条件的元素上执行块? – asymmetric 2011-12-26 17:34:37
take_while诀窍,谢谢! – 2011-03-06 18:23:08
也许我太正统了,但使用“take_while”或“detect”会让我觉得有点不自在,这些功能是为了在功能上使用(他们会返回一些东西),并产生一些副作用。也就是说,他们按照OP所要求的做。也许:@ list.take_while {...}。每个。好的,这是mattexx的答案。 – tokland 2011-03-06 18:45:45
@tokland:同意。答复调整相应,谢谢。 – 2011-03-06 19:05:55