Une boucle dans un tableau à l'étape
Je veux regarder tous les n-ième élément d'un tableau. En C++, je ferais ceci:
for(int x = 0; x<cx; x+=n){
value_i_care_about = array[x];
//do something with the value I care about.
}
Je veux faire la même chose en Ruby, mais ne peut pas trouver un moyen de "step". Un while
boucle pourrait faire le travail, mais je trouve ça de mauvais goût de l'utiliser pour une taille connue, et qu'il y ait un mieux (plus de Ruby) manière de faire.
- Semble que google pourrait avoir répondu à ce un
- Rien à propos de l'étape a pu être trouvé 🙂 chaque.. ou pour boucle est facile à trouver.. je veux faire tous les 5 ou 10 ou le 9 élément dans le tableau
- Benjamin réponse est incorrecte. Vous devriez regarder Levi's ou David réponse.
- Oui, il est logique que
1.step(3, 2)
donne 1 et 3. Dans ce code, l'étape est de 2, de sorte que le deuxième élément est ignoré. Qui vous laisse avec 1 et 3. - Ouais je vois comment cela fonctionne maintenant. Merci à tous.
- Par ailleurs, cela n'a rien à voir avec des Rails, c'est un Rubis question.
Vous devez vous connecter pour publier un commentaire.
Gammes ont un
step
méthode que vous pouvez utiliser pour passer à travers les indices:Ou si vous êtes à l'aise à l'aide de
...
avec les plages de la suite est un peu plus concis:(0...array.length)
au lieu de(0..array.length - 1)
Suffit d'utiliser l'étape() la méthode de l'aire de classe qui retourne un agent recenseur
Nous pouvons itérer tout en sautant sur une plage de numéros à chaque itération par exemple:
http://www.skorks.com/2009/09/a-wealth-of-ruby-loops-and-iterators/
Donc quelque chose comme:
Array
n'ont pas destep
méthode, de sorte que vous aurez "Undefined method pour l'étape".1.step(10,2)
fonctionne, mais qui n'a pas d'itérer sur un tableau. Levi a la bonne réponse.Ce est un excellent exemple de l'utilisation de l'opérateur modulo
%
Lorsque vous saisissez ce concept, vous pouvez l'appliquer dans un grand nombre de différents langages de programmation, sans avoir à les connaître et à l'extérieur.
if
s avecunless
... jk 😉Vous pouvez ajouter la méthode à la classe Array
Ce sujet:
Chaînage des itérateurs est très utile.
[1, 2, 3, 4, 5, 6, 7].select(&:odd?)