在ruby中告诉一个.each循环的结束
如果我有一个循环如
users.each do |u| #some code end
用户是多个用户的散列。 什么是最简单的条件逻辑,看看你是否在用户哈希中的最后一个用户,只想为最后一个用户执行特定的代码
users.each do |u| #code for everyone #conditional code for last user #code for the last user end end
谢谢
users.each_with_index do |u, index| # some code if index == users.size - 1 # code for the last user end end
如果这是一种或者两种情况,那么除了最后一个用户,还有一些代码只适用于最后一个用户,其他解决scheme之一可能更合适。
但是,您似乎正在为所有用户运行相同的代码,并为最后一个用户添加了一些附加代码。 如果是这样,这似乎更正确,更清楚地表明你的意图:
users.each do |u| #code for everyone end users.last.do_stuff() # code for last user
我认为最好的办法是:
users.each do |u| #code for everyone if u.equal?(users.last) #code for the last user end end
你有没有尝试each_with_index
?
users.each_with_index do |u, i| if users.size-1 == i #code for last items end end
h = { :a => :aa, :b => :bb } h.each_with_index do |(k,v), i| puts ' Put last element logic here' if i == h.size - 1 end
有时我觉得把逻辑分成两部分是最好的,一部分是所有用户,一部分是最后一部分。 所以我会做这样的事情:
users[0...-1].each do |user| method_for_all_users user end method_for_all_users users.last method_for_last_user users.last
你也可以使用@meager的方法来处理任何一种情况,在这种情况下,除了最后一个用户,还有一些代码只适用于最后一个用户。
users[0..-2].each do |u| #code for everyone except the last one, if the array size is 1 it gets never executed end users.last.do_stuff() # code for last user
这样你不需要一个条件!
有些版本的ruby没有最后的方法
h = { :a => :aa, :b => :bb } last_key = h.keys.last h.each do |k,v| puts "Put last key #{k} and last value #{v}" if last_key == k end
另一个解决scheme是从StopIteration救援:
user_list = users.each begin while true do user = user_list.next user.do_something end rescue StopIteration user.do_something end