2009-05-30 7 views

Répondre

26

Question intéressante. Utilisez un 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

je trouve 'si l'index == len + 1' plus esthétique. –

+0

n'est-ce pas supposé être @ stuff.each_with_index do | index, x |? (d'abord l'objet, puis l'index) –

+2

@BenjaminBenoudis qui serait 'if index == len - 1' – andreofthecape

2

Une manière un peu naïf de le manipuler, mais:

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

Une alternative plus lispy est d'utiliser

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

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

Beaucoup plus agréable que de vérifier chaque itération si nous sommes à la fin! Bien que je pense que vous en avez un trop. – Matt

+0

Merci! En fait, c'est un peu déroutant, puisque '-1' dans une gamme signifie" le dernier élément ", donc en fait' stuff [0 ..- 1] == stuff'. Nous devons utiliser la forme '...' de la gamme qui omet le dernier élément. – jackpipe

+0

Je vois! Vous devriez ajouter cela à la réponse pour le rendre un peu plus clair et enregistrer des questions stupides comme le mien;) – Matt

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

c'est la meilleure réponse ... pourrait être un peu mieux si vous voulez 1-ligne. 's == @ stuff.last? «chose pour la fin»: «choses pour le reste» – Dudo

+10

avertissement: cela ne fonctionnera pas si les éléments @stuff ne sont pas uniques. ie "a = [1,1]; a.map {| v | v == a.last}" renvoie [true, true]. Dans le cas d'entiers, il n'y a aucun moyen de déterminer si c'est réellement le dernier élément. Si vous utilisez d'autres objets, vous pouvez utiliser égal? (http://stackoverflow.com/questions/7156955/whats-the-difference-between-equal-eql-and) –

Questions connexes