2012-02-23 51 views
12

Nếu tôi có một vòng lặp while với một for loop bên của while vòng lặp, làm thế nào tôi có thể break cả hai vòng?ios phá vỡ lồng vòng

Tôi đang làm điều này vì 250ms bổ sung tôi nhận được từ việc không hoàn thành các vòng này sau khi tôi tìm thấy những gì tôi muốn thêm vào để có giá trị sau một thời gian.

giả:

while(alwaysTrue) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
     } 
    } 
} 
+3

tất cả các đề xuất cho đến nay, có vẻ chính xác. chọn bất kỳ cái nào trong số họ sẽ không sai. thiết kế tôi sẽ đề nghị là làm cho phần bạn muốn thoát ra khỏi chức năng/phương thức của nó và trở về từ nó. Abstraction là sức mạnh chính của lập trình hàm và hướng đối tượng - sử dụng nó. – bshirley

+0

Được gắn thẻ lại vì đó là câu hỏi ngôn ngữ, không phải là câu hỏi về os. :) – Almo

+0

@bshirley Tôi đã sử dụng 'goto' mặc dù tôi hơi ngượng ngùng về nó. Nó chỉ ở một chỗ trong toàn bộ ứng dụng nên tôi thấy nó ổn. Tuy nhiên, vì một số thay đổi về thiết kế mã, chúng tôi có thể chuyển sang phương thức đề xuất của bạn (đây luôn là lựa chọn đầu tiên của tôi). +1 – Jacksonkr

Trả lời

28

Đây là nơi goto là bạn của bạn. Có, đó là goto.

while(alwaysTrue) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
      goto BAIL; 
     } 
    } 
} 
BAIL: 
NSLog(@"Freedom!"); 

Tùy chọn khác là có các mạch ngắn trong vòng lặp của bạn.

while(alwaysTrue && !found) { 
    for(NSArray *arr in twoThousandItems) { 
     if(IFoundWhatIWasLookingFor) { 
      // assign some stuff here 
      // break everything, not just the for loop. 
      found = YES; 
      break; 
     } 
    } 
} 
+15

Nó không phải là bạn của ai cả, 'goto' là tà ác. +1 – picciano

+4

Sau khi đọc lên trên 'goto' có vẻ như ** lạm dụng ** của nó là cái ác là gì. Mặc dù tôi là người hâm mộ lớn hơn khi sử dụng các hàm trả về như được đề cập bởi * @ bshirley *, một 'goto' sẽ hoạt động cho ** ** một tình huống này. Cảm ơn & +1 – Jacksonkr

4

Đây là một cách. Đây là một kỹ thuật áp dụng cho các biến thể C khác và các ngôn ngữ khác.

bool breakOuterLoop = false; 
while(!breakOuterLoop) 
{ 
    for(NSArray *arr in twoThousandItems) 
    { 
     if(IFoundWhatIWasLookingFor) 
     { 
      // assign some stuff here 
      breakOuterLoop = true; 
      break; 
     } 
    } 
} 
Các vấn đề liên quan