2009-05-30 12 views

答えて

26

興味深い質問です。 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 
+1

を使用することです== len + 1'もっと美しい。 –

+0

これは、@ stuff.each_with_index do | index、x |ではないと思われますか? (最初のオブジェクトとインデックス) –

+2

@BenjaminBenoudisは 'if index == len - 1'となるでしょう – andreofthecape

2

それを処理するために、やや素朴な方法を、しかし:

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

は、より多くのLispyの代替は私が `場合は、インデックスを見つける

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

end 
@stuff[-1].do_something_else 
5
<% @stuff[0...-1].each do |thing| %> 
    <%= thing %> 
<% end %> 
<%= @stuff.last %> 
+0

最後にすべての繰り返しをチェックするよりもずっとうれしいです!あなたにはあまりにも多くの '.'があると思いますが? – Matt

+0

ありがとう!範囲内の '-1'は"最後の要素 "を表しているので、実際は' stuff {0 ..- 1} == stuff'なので、実際はちょっと混乱します。最後の要素を省略した '...'形式の範囲を使う必要があります。 – jackpipe

+0

私は見る!あなたは答えにそれを追加して、それをもっと鮮明にし、私のような愚かな質問を保存する必要があります; – Matt

54
@stuff.each do |s| 
    ...normal stuff... 
    if s == @stuff.last 
    ...special stuff... 
    end 
end 
+2

これは最高の答えです... 1行にしたい場合は、より良いタッチになるかもしれません。 's == @ stuff.last? '最後のもの': '残りのもの' – Dudo

+10

警告:@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) –

関連する問題