2009-05-30 15 views

cevap

26

İlginç bir soru. Her_with_index kullanın.

len = @stuff.length 

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

Ben endeksi ise 'bulmak kullanmak olmaktır == len + 1' daha estetik. –

+0

değil mi @ stuff.each_with_index do | index, x |? (önce nesne ve daha sonra dizin) –

+2

@BenjaminBenoudis bu olurdu eğer index == len - 1 ' – andreofthecape

2

bir biraz da naif bir yol idare, bunlarla:

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

Daha lispy alternatif

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

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

Sonunda olduğumuzda her yinelemeyi kontrol etmekten çok daha güzel! Bende çok fazla var sanıyordum. – Matt

+0

Teşekkürler! Aslında biraz kafa karıştırıcıdır, çünkü “-1” bir aralıkta “son öğe” anlamına gelir, yani aslında “şeyler [0 ..- 1] == şeyler”. Son unsuru yok eden “...” biçimini kullanmamız gerekiyor. – jackpipe

+0

Görüyorum! Bunu biraz daha açık hale getirmek ve benimki gibi aptalca soruları kaydetmek için cevaba eklemelisiniz;) – Matt

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

bu en iyi cevaptır ... 1 satırlık yapmak isterseniz daha iyi bir dokunuş olabilir. 's == @ stuff.last? 'sonuncusu': 'geri kalanlar için şeyler' ' – Dudo

+10

uyarı: @stuff öğeleri benzersiz değilse bu işe yaramaz. , yani "a = [1,1]; a.map {| v | v == a.last}", [true, true] değerini döndürür. tamsayı durumunda gerçekten son eleman olup olmadığını belirlemenin bir yolu yoktur. Diğer nesneleri kullanıyorsanız, eşit kullanabilirsiniz? (Http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –

İlgili konular