Comment puis-je effectuer une itération sur une plage avec une étape personnalisée?
Comment puis-je effectuer une itération sur une gamme de couleur Rouille avec une étape autre que 1? Je suis venue à partir d'un C++ arrière-plan, donc j'aimerais faire quelque chose comme
for(auto i = 0; i <= n; i+=2) {
//...
}
À Rust-je besoin pour utiliser le range
fonction, et il ne semble pas comme il y a un troisième argument disponibles pour avoir une étape personnalisée. Comment puis-je y arriver?
Vous devez vous connecter pour publier un commentaire.
range_step_inclusive
etrange_step
ont disparu depuis longtemps.Comme de la Rouille 1.28,
Iterator::step_by
est stable:Il me semble que jusqu'à ce que le
.step_by
méthode est rendue stable, on peut facilement accomplir ce que vous voulez avec unIterator
(qui est ce queRange
s sont vraiment de toute façon):Si on a besoin d'itérer plusieurs plages de différents types, le code peut être faite générique comme suit:
Je vais le laisser pour vous d'éliminer la partie supérieure de vérification de limites pour créer un open ended structure si une boucle infinie est nécessaire...
Avantages de cette approche est qu'travaille avec
for
la cabane à sucre et continuer à travailler même lorsque fonctionnalités instables deviennent utilisables; aussi, à la différence de la de-sucrées en utilisant l'approche standardRange
s, il ne perd pas en efficacité par de multiples.next()
appels. Les inconvénients sont qu'il faut un peu de lignes de code pour configurer l'itérateur donc ne peut être vaut la peine pour le code qui a beaucoup de boucles.U
à votre deuxième option, vous pouvez utiliser les types de support d'addition avec un type différent et rendement encore unT
. Par exemple, l'heure et la durée viennent à l'esprit.Vous voulez écrire votre code C++:
...dans la Rouille comme suit:
Je pense que la Rouille version est plus lisible aussi.
Utiliser le num caisse avec range_step
Si vous entrez par quelque chose de prédéfini, et les petits comme les 2, vous souhaitez peut-être utiliser l'itérateur à l'étape manuellement. par exemple:
Vous pouvez même utiliser cette étape par une quantité arbitraire (même si c'est certainement de plus en plus longues et plus difficiles à digérer):