我正在发送几个用于打印pdf票证的参数
Parameters: {"utf8"=>"✓", "list"=>{"client_0801541"=>"0801541", "client_0801554"=>"0801554", "client_0801554"=>"0801554"}, "subaction"=>"print selected clients"}
我需要将每个客户端打印在不同的页面上,为此,我在显示客户端代码的末尾使用了一个start_new_page,但是在最后一个客户端离开空白页面之后才这样。我如何才能使每个客户端验证它是否是数组的最后一个?我尝试了以下方法:
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
答案 0 :(得分:4)
您可以尝试:
@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
正如塔德曼(Tadman)所建议的那样,您还可以通过以下操作来加快速度:
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
。