List data = [1, 2, 3];
data.forEach((value) {
if (value == 2) {
// how to stop?
}
print(value);
});
私は試した return false;
はjQueryでは機能しますが、Dartでは機能しません。それを行う方法はありますか?
他の回答で適切に示されたイテレータを暗黙的に使用するfor/inを使用することもできます。
List data = [1,2,3];
for(final i in data){
print('$i');
if (i == 2){
break;
}
}
ForEach()およびtakeWhile()を使用してサンプルを実装することもできます。
var data = [1, 2, 3];
data.takeWhile((val) => val != 2).forEach(print);
ForEachが取るコールバックはvoidを返すため、反復を停止するメカニズムはありません。
この場合、イテレータを使用する必要があります。
void listIteration() {
List data = [1,2,3];
Iterator i = data.iterator();
while (i.hasNext()) {
var e = i.next();
print('$e');
if (e == 2) {
break;
}
}
}
List
を壊す
List<int> example = [ 1, 2, 3 ];
for (int value in example) {
if (value == 2) {
break;
}
}
Map
を壊す
Map
を処理している場合は、指定されたマップから単純にイテレータを取得することはできませんが、値またはキーのいずれかに適用することで、for
を使用できます。キーと値の両方の組み合わせが必要になる場合があるため、以下に例を示します。
Map<String, int> example = { 'A': 1, 'B': 2, 'C': 3 };
for (String key in example.keys) {
if (example[key] == 2 && key == 'B') {
break;
}
}
必要に応じて[ 'A', 'B', 'C' ]
はLinkedHashMapを使用するため、マップには必ずしもキーがないことに注意してください。値だけが必要な場合は、example.values
ではなくexample.keys
を実行してください。
または、要素のみを検索する場合は、次のようにすべてを簡略化できます。
List<int> example = [ 1, 2, 3 ];
int matched = example.firstMatching((e) => e == 2, orElse: () => null);
Dartはローカル以外のリターンをサポートしていないため、コールバックからリターンしてもループは解消されません。 jQueryで機能するのは、each()がコールバックによって返された値をチェックするためです。 Dart forEachコールバックはvoidを返します。
greg Loweの投稿に基づいて、私は自分のプロジェクトのどこを使用し、それも機能しました。
var data = [1, 2, 3];
data.where((val) => val != 2).forEach(print);