List data = [1, 2, 3];
data.forEach((value) {
if (value == 2) {
// how to stop?
}
print(value);
});
Run Code Online (Sandbox Code Playgroud)
我尝试过return false;在jQuery中运行,但它在Dart中不起作用.有办法吗?
Joh*_*ans 46
你也可以使用for/in,它隐含地使用在另一个答案中恰当地演示的迭代器:
List data = [1,2,3];
for(final i in data){
print('$i');
if (i == 2){
break;
}
}
Run Code Online (Sandbox Code Playgroud)
Gre*_*owe 25
也可以使用forEach()和takeWhile()来实现您的示例.
var data = [1, 2, 3];
data.takeWhile((val) => val != 2).forEach(print);
Run Code Online (Sandbox Code Playgroud)
Cut*_*tch 13
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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
src*_*der 13
打破一个 List
List<int> example = [ 1, 2, 3 ];
for (int value in example) {
if (value == 2) {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
打破一个 Map
如果你正在处理a,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;
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,[ 'A', 'B', 'C' ]如果您需要,Map不一定具有使用LinkedHashMap的键.如果你只是想的价值观,只是做example.values代替example.keys.
或者,如果您只搜索元素,则可以将所有内容简化为:
List<int> example = [ 1, 2, 3 ];
int matched = example.firstMatching((e) => e == 2, orElse: () => null);
Run Code Online (Sandbox Code Playgroud)
Dart 不支持非本地返回,因此从回调返回不会破坏循环。它在 jQuery 中工作的原因是 each() 检查回调返回的值。Dart forEach 回调返回 void。
http://docs.jquery.com/Core/each
| 归档时间: |
|
| 查看次数: |
21744 次 |
| 最近记录: |