Если у меня есть петля, такая как
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
Спасибо
Ответ 1
users.each_with_index do |u, index|
# some code
if index == users.size - 1
# code for the last user
end
end
Ответ 2
Если это либо/или ситуация, когда вы применяете код ко всем, кроме последнего пользователя, а затем некоторый уникальный код только для последнего пользователя, одно из других решений может быть более подходящим.
Однако, похоже, вы используете одинаковый код для всех пользователей и некоторый дополнительный код для последнего пользователя. Если это случай, это кажется более правильным и более четко заявляет о ваших намерениях:
users.each do |u|
#code for everyone
end
users.last.do_stuff() # code for last user
Ответ 3
Я думаю, что лучший подход:
users.each do |u|
#code for everyone
if u.equal?(users.last)
#code for the last user
end
end
Ответ 4
Вы пробовали each_with_index
?
users.each_with_index do |u, i|
if users.size-1 == i
#code for last items
end
end
Ответ 5
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
Ответ 6
Иногда мне кажется, что лучше разделить логику на две части: одну для всех пользователей и одну для последней. Поэтому я бы сделал что-то вроде этого:
users[0...-1].each do |user|
method_for_all_users user
end
method_for_all_users users.last
method_for_last_user users.last
Ответ 7
Вы можете использовать подход @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
Таким образом, вам не нужен условный!
Ответ 8
Нет никакого последнего метода для хеша для некоторых версий 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
Ответ 9
Другим решением является спасение от StopIteration:
user_list = users.each
begin
while true do
user = user_list.next
user.do_something
end
rescue StopIteration
user.do_something
end