【问题标题】:last element of the hash哈希的最后一个元素
【发布时间】:2018-12-12 16:31:25
【问题描述】:

我正在发送几个用于打印 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

【问题讨论】:

  • 尽量避免无缘无故引用变量。这里"#{client_id}" 可以是client_id。如果您出于某种原因需要将其强制转换为字符串,client_id.to_s 会清楚说明您在做什么。

标签: ruby-on-rails ruby ruby-on-rails-4


【解决方案1】:

你可以试试:

@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 上的方法。
  • 可能还有其他东西。

顺便说一句,list 中的最后两个 keysvalues 是相同的。我不知道这是否是一个错误。但是,如果这是您的意图,那么您可能会遇到其他问题。

顺便说一句,您的问题标题是“数组的最后一个元素”,但您使用的是hash,而不是array

【讨论】:

  • each_with_index 方法更快,特别是如果您提前将@clients.length 捕获到变量中。
  • @jvillian,非常感谢我的朋友,这没有问题
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-11-27
  • 1970-01-01
  • 2016-07-16
  • 2023-04-02
  • 2014-03-15
  • 2015-12-03
  • 1970-01-01
相关资源
最近更新 更多