Ruby on rails 如何确定每个循环中的最后一个对象?

Ruby on rails 如何确定每个循环中的最后一个对象?,ruby-on-rails,Ruby On Rails,在Rails中典型的每个循环中,我如何确定最后一个对象,因为我想对它做一些与其他对象不同的事情 <% @stuff.each do |thing| %> <% end %> 有趣的问题。使用带有索引的each_ len = @stuff.length @stuff.each_with_index do |x, index| # should be index + 1 if index+1 == len # do something end e

在Rails中典型的每个循环中,我如何确定最后一个对象,因为我想对它做一些与其他对象不同的事情

<% @stuff.each do |thing| %>

<% end %>

有趣的问题。使用带有索引的each_

len = @stuff.length

@stuff.each_with_index do |x, index|
 # should be index + 1       
 if index+1 == len
 # do something
  end
end

有点天真的处理方法,但是:

<% @stuff.each_with_index do |thing, i| %>
  <% if (i + 1) == @stuff.length %>
    ...
  <% else %>
    ...
  <% end %>
<% end %>

...
...

一个更简洁的选择是使用

@stuff[1..-1].each do |thing|

end
@stuff[-1].do_something_else


这是最好的答案。。。如果你想单列的话,可能会更好<代码>s==@stuff.last?“最后一件事“:“剩下的事”警告:如果@stuff元素不是唯一的,这将不起作用。ie“a=[1,1];a.map{| v | v==a.last}”返回[true,true]。对于整数,无法确定它是否真的是最后一个元素。如果使用其他对象,可以使用equal?()我发现
如果index==len+1
更美观。它不应该是@stuff.each_和| index do | index,x |?(首先是对象,然后是索引)@BenjaminBenoudis如果index==len-1,这将比检查每一次迭代(如果我们在最后)要好得多!虽然我觉得你的
太多了?谢谢!实际上这有点让人困惑,因为范围中的
-1
代表“最后一个元素”,所以实际上
stuff[0..-1]==stuff
。我们需要使用范围的
形式,它省略了最后一个元素。我明白了!你应该把它添加到答案中,让它更清楚一点,省去像我这样愚蠢的问题;)
<% @stuff[0...-1].each do |thing| %>
  <%= thing %>
<% end %>
<%= @stuff.last %>
@stuff.each do |s|
  ...normal stuff...
  if s == @stuff.last
    ...special stuff...
  end
end