如果我有一个循环,例如
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
答案 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