List data = [1, 2, 3];
data.forEach((value) {
if (value == 2) {
// how to stop?
}
print(value);
});
J'ai essayé return false;
qui fonctionne dans jQuery, mais ne fonctionne pas dans Dart. Y a-t-il un moyen de le faire?
Vous pouvez également utiliser un for/in, qui utilise implicitement l'itérateur correctement démontré dans l'autre réponse:
List data = [1,2,3];
for(final i in data){
print('$i');
if (i == 2){
break;
}
}
Il est également possible d'implémenter votre exemple en utilisant forEach () et takeWhile ().
var data = [1, 2, 3];
data.takeWhile((val) => val != 2).forEach(print);
Le rappel que prend forEach renvoie void donc il n'y a pas de mécanisme pour arrêter l'itération.
Dans ce cas, vous devez utiliser des itérateurs:
void listIteration() {
List data = [1,2,3];
Iterator i = data.iterator();
while (i.hasNext()) {
var e = i.next();
print('$e');
if (e == 2) {
break;
}
}
}
Briser un List
List<int> example = [ 1, 2, 3 ];
for (int value in example) {
if (value == 2) {
break;
}
}
Briser un Map
Si vous avez affaire à un Map
, vous ne pouvez pas simplement obtenir un itérateur de la carte donnée, mais vous pouvez toujours utiliser un for
en l'appliquant aux valeurs ou aux clés. Comme vous pouvez parfois avoir besoin de la combinaison de clés et de valeurs, voici un exemple:
Map<String, int> example = { 'A': 1, 'B': 2, 'C': 3 };
for (String key in example.keys) {
if (example[key] == 2 && key == 'B') {
break;
}
}
Notez qu'une carte n'a pas nécessairement ses clés comme [ 'A', 'B', 'C' ]
utilisez un LinkedHashMap si vous le souhaitez. Si vous voulez juste les valeurs, faites simplement example.values
au lieu de example.keys
.
Alternativement, si vous recherchez uniquement un élément, vous pouvez tout simplifier pour:
List<int> example = [ 1, 2, 3 ];
int matched = example.firstMatching((e) => e == 2, orElse: () => null);
Dart ne prend pas en charge les retours non locaux, donc le retour d'un rappel ne rompra pas la boucle. La raison pour laquelle cela fonctionne dans jQuery est que each () vérifie la valeur retournée par le rappel. Dart forEach callback renvoie vide.
basé sur le post de Greg Lowe, j'ai utilisé où pour mon projet et ça marche aussi.
var data = [1, 2, 3];
data.where((val) => val != 2).forEach(print);