Rails'deki her bir döngüde, son nesneyi nasıl belirlerim, çünkü nesnenin geri kalanından farklı bir şey yapmak istiyorum.Her döngüdeki son nesne nasıl belirlenir?
<% @stuff.each do |thing| %>
<% end %>
Rails'deki her bir döngüde, son nesneyi nasıl belirlerim, çünkü nesnenin geri kalanından farklı bir şey yapmak istiyorum.Her döngüdeki son nesne nasıl belirlenir?
<% @stuff.each do |thing| %>
<% end %>
İ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
bir biraz da naif bir yol idare, bunlarla:
<% @stuff.each_with_index do |thing, i| %>
<% if (i + 1) == @stuff.length %>
...
<% else %>
...
<% end %>
<% end %>
Daha lispy alternatif
@stuff[1..-1].each do |thing|
end
@stuff[-1].do_something_else
<% @stuff[0...-1].each do |thing| %>
<%= thing %>
<% end %>
<%= @stuff.last %>
Sonunda olduğumuzda her yinelemeyi kontrol etmekten çok daha güzel! Bende çok fazla var sanıyordum. – Matt
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
Görüyorum! Bunu biraz daha açık hale getirmek ve benimki gibi aptalca soruları kaydetmek için cevaba eklemelisiniz;) – Matt
@stuff.each do |s|
...normal stuff...
if s == @stuff.last
...special stuff...
end
end
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
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) –
Ben endeksi ise 'bulmak kullanmak olmaktır == len + 1' daha estetik. –
değil mi @ stuff.each_with_index do | index, x |? (önce nesne ve daha sonra dizin) –
@BenjaminBenoudis bu olurdu eğer index == len - 1 ' – andreofthecape