Je veux utiliser un pour-chacun et un compteur:
i=0
for blah in blahs
puts i.to_s + " " + blah
i+=1
end
Y a-t-il une meilleure façon de le faire?
Remarque: je ne sais pas s'il blahs
s'agit d'un tableau ou d'un hachage, mais devoir le faire ne le blahs[i]
rendrait pas beaucoup plus sexy. J'aimerais aussi savoir comment écrire i++
en Ruby.
Techniquement, la réponse de Matt et Squeegy est arrivée en premier, mais je donne la meilleure réponse à paradoja, alors répartissez un peu les points sur SO. Sa réponse avait également la note sur les versions, qui est toujours pertinente (tant que mon Ubuntu 8.04 utilise Ruby 1.8.6).
J'aurais dû utiliser puts "#{i} #{blah}"
ce qui est beaucoup plus succinct.
Réponses:
Comme les gens l'ont dit, vous pouvez utiliser
mais si vous voulez des index avec un itérateur différent de "each" (par exemple, si vous voulez mapper avec un index ou quelque chose comme ça), vous pouvez concaténer les énumérateurs avec la méthode each_with_index, ou simplement utiliser with_index:
C'est quelque chose que vous pouvez faire à partir de ruby 1.8.7 et 1.9.
la source
Vous ne pouvez pas faire ça avec pour. J'aime généralement l'appel plus déclaratif à chacun personnellement de toute façon. En partie parce qu'il est facile de passer à d'autres formes lorsque vous atteignez la limite de la syntaxe for.
la source
Oui, c'est
collection.each
pour faire des boucles, puiseach_with_index
pour obtenir l'index.Vous devriez probablement lire un livre Ruby car c'est Ruby fondamental et si vous ne le savez pas, vous allez avoir de gros problèmes (essayez: http://poignantguide.net/ruby/ ).
Tiré du code source de Ruby:
la source
Si vous ne disposez pas de la nouvelle version de
each_with_index
, vous pouvez utiliser lazip
méthode pour associer des index avec des éléments:qui produit:
la source
'%s %s' % [1, "two"]
dans la documentation Ruby? Merci pour votre aide et pour la conservation de l'espace vertical en utilisant une seule ligne pour la fermeture éclair et la cartographie.Quant à votre question sur le faire
i++
, eh bien, vous ne pouvez pas le faire dans Ruby. Lai += 1
déclaration que vous avez faite est exactement comment vous êtes censé le faire.la source
La série énumérative énumérative est assez agréable.
la source
S'il
blahs
s'agit d'une classe qui se mélange dans Enumerable, vous devriez pouvoir le faire:la source
Si vous souhaitez obtenir un index de rubis pour chacun, vous pouvez utiliser
Voici un exemple pour montrer comment
.each_with_index
fonctionne:Cela imprimera:
la source