2009-05-09 8 views
60

나는 NSArray을 얻었고 특수한 경우 뒤에서 반복해야하므로 마지막 요소를 먼저 봅니다. 성능상의 이유로 : 마지막 하나가 이해가되지 않는다면 이전의 모든 것들은 무시할 수 있습니다. 그래서 루프를 깰 싶습니다. 하지만 0부터 n까지 앞으로 반복 할 경우 작동하지 않습니다. n에서 0으로 갈 필요가 있습니다. 모르는 방법이나 함수가있을 수 있으므로 휠을 다시 만들 필요가 없습니다. here에서NSArray를 거꾸로 반복하는 쉬운 방법이 있습니까?

+4

"Objective-C에서 NSArray를 어떻게 반전시킬 수 있습니까?" 완전히 다른 질문입니다. – Nestor

+0

스위프트 : http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch

답변

179

는 다른 답변에 추가하려면 , 당신은 오브젝티브 C 2.0에서 빠른 열거 기능과 함께 -[NSArray reverseObjectEnumerator]을 사용할 수 있습니다 (레오파드에서 사용할 수, 아이폰) : 좀 더 많은 정보와

for (id someObject in [myArray reverseObjectEnumerator]) 
{ 
    // print some info 
    NSLog([someObject description]); 
} 

출처 : http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

+0

이것은 빠른 열거 형으로 간주 되나'[myArray count] -1'에서 시작하는 일반 for 루프보다 빠릅니까? 'NSString'을 거꾸로 어떻게 반복합니까? – ma11hew28

+0

지금 당장 링크가 없지만 Apple 엔지니어가 열거 속도가 얼마나 빠르며 왜 빠른지 설명하는 어딘가의 비디오 (WWDC 일 수 있음)가 있습니다. 그것은 인덱스 기반 NSArray 열거 형과 고전적인 Foundation 열거 자보다 성능이 우수합니다. 시나리오에 따라 많이 다릅니다. –

+0

사전에 루프를 역으로 실행해야합니까? 어떻게 그렇게 할 수 있습니까? –

2
[NsArray reverseObjectEnumerator] 
12

이 이후

NSEnumerator* myIterator = [myArray reverseObjectEnumerator]; 
id anObject; 

while(anObject = [myIterator nextObject]) 
{ 
    /* do something useful with anObject */ 
} 
16

은의 performace를 들어,이 옵션을 가지고 잘 모두가 가장 적합한 볼을 시도하는 것이 좋습니다 것입니다.

  • -[NSArray reverseObjectEnumerator]
  • Create a reverse copy of the array
  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
    • 그 일반적으로
    • 사용을 통해 루프에 대한 표준 C를 반복하고 시작하고 배열을 거꾸로 작동합니다. (성능이 슈퍼 중요 경우)

    더 극단적 인 방법은

    • 코코아 빠른 개체 열거를 구현하고 반대로 자신의 동등한를 만드는 방법에 최대 읽기.
    • C 또는 C++ 배열을 사용하십시오.

    다른 것들이있을 수 있습니다. 어떤 경우 에라도 누구나 자유롭게 추가 할 수 있습니다.

    +1

    나는 enumerateObjectsWithOptions : NSEnumerationReverse가 최상의 대답이라고 말하고 싶습니다. 특히 당신은 당신이 어떤 색인인지 알 필요가 있습니다. 감사!!! –

    0
    for (int i = ((int)[array count] - 1); i > -1; i--) { 
        NSLog(@"element: %@",array[i]); 
    }