典型的なRailsの各ループでは、残りのオブジェクトとは異なる処理をしたいので、最後のオブジェクトをどのように決定するのですか?各ループの最後のオブジェクトを特定する方法は?
<% @stuff.each do |thing| %>
<% end %>
典型的なRailsの各ループでは、残りのオブジェクトとは異なる処理をしたいので、最後のオブジェクトをどのように決定するのですか?各ループの最後のオブジェクトを特定する方法は?
<% @stuff.each do |thing| %>
<% end %>
興味深い質問です。 each_with_indexを使用します。
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 %>
は、より多くのLispyの代替は私が `場合は、インデックスを見つける
@stuff[1..-1].each do |thing|
end
@stuff[-1].do_something_else
<% @stuff[0...-1].each do |thing| %>
<%= thing %>
<% end %>
<%= @stuff.last %>
@stuff.each do |s|
...normal stuff...
if s == @stuff.last
...special stuff...
end
end
これは最高の答えです... 1行にしたい場合は、より良いタッチになるかもしれません。 's == @ stuff.last? '最後のもの': '残りのもの' – Dudo
警告:@stuff要素が一意でない場合、これは動作しません。 "a = [1,1]; a.map {| v | v == a.last}"は[true、true]を返します。 整数の場合、実際に最後の要素かどうかを判断する方法はありません。他のオブジェクトを使用している場合はequalを使用できますか? (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –
を使用することです== len + 1'もっと美しい。 –
これは、@ stuff.each_with_index do | index、x |ではないと思われますか? (最初のオブジェクトとインデックス) –
@BenjaminBenoudisは 'if index == len - 1'となるでしょう – andreofthecape