последний элемент хэша - PullRequest
       6

последний элемент хэша

0 голосов
/ 12 декабря 2018

Я отправляю несколько параметров для печати билетов в формате 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

1 Ответ

0 голосов
/ 12 декабря 2018

Вы можете попробовать:

@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.

...