告诉ruby中的.each循环结束

时间:2010-10-22 20:30:04

标签: ruby-on-rails ruby loops 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

9 个答案:

答案 0 :(得分:131)

users.each_with_index do |u, index|
  # some code
  if index == users.size - 1
    # code for the last user
  end
end

答案 1 :(得分:38)

如果是/或某种情况,您将一些代码应用于所有但是最后一个用户,然后将一些唯一代码应用于最后一个用户,其他解决方案可能更合适。

但是,您似乎为所有用户运行相同的代码,并为最后一个用户运行一些其他代码。如果是这种情况,这似乎更正确,更清楚地表明你的意图:

users.each do |u|
  #code for everyone
end

users.last.do_stuff() # code for last user

答案 2 :(得分:18)

我认为最好的方法是:

users.each do |u|
  #code for everyone
  if u.equal?(users.last)
    #code for the last user
  end
end

答案 3 :(得分:10)

你试过each_with_index吗?

users.each_with_index do |u, i|
  if users.size-1 == i
     #code for last items
  end
end

答案 4 :(得分:6)

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

答案 5 :(得分:3)

有时我发现将逻辑分为两部分更好,一部分用于所有用户,一部分用于最后一部分。所以我会做这样的事情:

users[0...-1].each do |user|
  method_for_all_users user
end

method_for_all_users users.last
method_for_last_user users.last

答案 6 :(得分:3)

您也可以将@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

这样你就不需要有条件的了!

答案 7 :(得分:1)

另一个解决方案是从StopIteration救援:

user_list = users.each

begin
  while true do
    user = user_list.next
    user.do_something
  end
rescue StopIteration
  user.do_something
end

答案 8 :(得分:0)

对于某些版本的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