2012-09-25 3 views
15
List data = [1, 2, 3]; 
data.forEach((value) { 
    if (value == 2) { 
    // how to stop? 
    } 
    print(value); 
}); 

jQuery에서 작동하는 return false;을 시도했지만 Dart에서는 작동하지 않습니다. 할 방법이 있습니까?다트의 .forEach()를 멈추는 방법?

+0

"작동하지 않음"은 무엇을 의미합니까? 실제로 무엇을합니까? –

+0

아무 것도하지 않습니다. – Leksat

+0

JavaScript로 작동한다고하면 jQuery와 같은 라이브러리에서 의미가 있습니까? 여기에 설명 된 알고리즘이 false 값을 반환하지 않는 것처럼 보입니다. https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/forEach 이 기능을 원한다면 버그. –

답변

16

당신은 또한 사용할 수에 /에서 암시 적으로 적절하게 다른 답변에서 설명 반복자 사용하는 :

List data = [1,2,3]; 

for(final i in data){ 
    print('$i'); 
    if (i == 2){ 
    break; 
    } 
} 
+0

아래의 "takeWhile()"솔루션은 Dart에 대한 최근 변경 사항을 활용하며 대부분의 경우 더 나은 해결책 일 수 있습니다. –

8

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; 
    } 
    } 
} 
2

다트 수행을 로컬이 아닌 반환을 지원하지 않으므로 콜백에서 반환해도 루프가 중단되지 않습니다. jQuery에서 작동하는 이유는 each()가 콜백에 의해 반환 된 값을 확인한다는 것입니다. Dart forEach 콜백은 void를 반환합니다. 실연

http://docs.jquery.com/Core/each

7

파괴 List

List<int> example = [ 1, 2, 3 ]; 

for (int value in example) { 
    if (value == 2) { 
    break; 
    } 
} 

Map

당신은 단순히 지정된 맵에서 반복자를 얻을 수없는 Map를 처리하는 경우,하지만 당신이 할 수있는 값이나 키에 적용하여 for을 계속 사용하십시오. 당신이 원하는 경우 [ 'A', 'B', 'C' ]가의 LinkedHashMap을 사용하는 등의지도가 반드시 그들이 키가없는 것을

Map<String, int> example = { 'A': 1, 'B': 2, 'C': 3 }; 

for (String key in example.keys) { 
    if (example[key] == 2 && key == 'B') { 
    break; 
    } 
} 

참고 : 때때로 모두 키와 값의 조합을해야 할 수도 있기 때문에, 여기에 예입니다. 그냥 값을 원하면 example.keys 대신 example.values을 사용하면됩니다. foreach는()와 takeWhile()를 사용하여 예를 구현하는 것도 가능

List<int> example = [ 1, 2, 3 ]; 
int matched = example.firstMatching((e) => e == 2, orElse:() => null); 
11

: 당신은 단지 요소에 대해 검색하는 경우에

양자 택일로, 당신은 모든 것을 단순화 할 수 있습니다.

var data = [1, 2, 3]; 
data.takeWhile((val) => val != 2).forEach(print); 
+0

.takeWhile()이 원래 답변을 올렸을 때 주위에 없었습니다. 대부분의 경우 지금은 더 적절하고 우아한 접근 방식이라고 말할 수 있습니다. –