Вы можете попробовать:
@clients.each do |(c, client_id)|
draw_text "#{client_id}", :at => [0,22], :size => 5, :style => :bold
start_new_page unless client_id == @clients.values.last
end
Вы также можете попробовать:
@clients.each_with_index do |(c, client_id), i|
draw_text "#{client_id}", :at => [0,22], :size => 5, :style => :bold
start_new_page unless i == @clients.length - 1
end
Как предлагает Тадман, вы также можете ускорить это, выполнив:
def client
@clients_length = @clients.length - 1
@clients.each_with_index do |(c, client_id), i|
draw_text "#{client_id}", :at => [0,22], :size => 5, :style => :bold
start_new_page unless i == @clients_length
end
end
Ваш исходный код:
def client
@client.each do |(c,client_id)|
draw_text "#{client_id}", :at => [0,22], :size => 5, :style => :bold
start_new_page unless client_id == @client.map{|e|[e.c, e.client_id]}.client_id.last
end
end
Кажется, что он минимален, потому что:
- Вы используете
map
на каждой итерации, что кажется расточительным. - В
@client.map{|e|[e.c, e.client_id]}
, .c
и .client_id
не являются методами для Array
. .client_id
не являются методами для Array
. - Возможнодругие вещи.
Кстати, последние два keys
и values
в вашем list
идентичны.Я не знаю, если это ошибка.Но если это именно то, что вы намереваетесь, то у вас могут быть другие проблемы.
Кстати, в заголовке вашего вопроса написано «последний элемент массива», но вы работаете с hash
, а неarray
.