2010-12-27 2 views

답변

15

당신이 배열을 시작하는 경우 마지막 요소를 나가 (이 ' 그것에 대한 특정 호출)를 사용하고 열거 자에서 얻은 각 요소를 비교합니다. 같은 뭔가 :

id lastEl = [myArray lastObject]; 

for (id anEl in myArray) 
{ 
    if (anEl == lastEl) 
    ..... // do the last thing 
} 

비교 비용은 카운터와 동일하지만 당신은 당신이 카운터를 증가하는 것을 잊지 때 변함없이 발생하는 카운터 또는 실수를 증가의 비용이 없습니다.

+0

나는 이것에 동의 하겠지만 "lastElement"가 아니라 "lastObject"라고 생각한다. – slycrel

+0

이제 당신과 나는 동의합니다! 그게 내가 SDK 문서를 호출하지 않는 것에 대한 것입니다. –

+0

멋진 답변과 내가 찾고 있었던 것! –

0

나는 이것을하는 (단순한) 방법이 없다고 생각합니다. 빠른 열거 형을 사용하는 것의 단점 중 하나입니다. 따라서 열거중인 항목의 색인을 알아야 할 때 정수로 작성해야합니다. , 당신은 여전히 ​​

2

는 일반적으로 빠른 열거하면 카운터를 사용하지 않는 의미 등 빠른 열거를 사용할 때 경계 밖으로 갈 수 없다는 사실에서 혜택을 얻을 것입니다 말했다

... 다른 형태는 카운터입니다없이

http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Articles/ocFastEnumeration.html

...

NSEnumerator *enumerator = [objectSet objectEnumerator]; 
id setObject; 
while ((setObject = [enumerator nextObject]) != nil) 
{ 
    ... 
} 
1

성능 테스트에 책임이있는 경우 here은 빠른 열거 형과 블록 열거 형간에 성능 차이가 없습니다. 또는 Bbum은 말했다 here "블록 기반 열거 형을 사용하면 컬렉션 클래스가 네이티브 저장 형식의 가장 빠른 탐색만큼 빠르게 내용을 열거 할 수 있습니다."그러면 블록 열거 형을 사용하여 동일한 인덱스와 개체를 얻을 수 있도록 제안 할 것입니다. 시간, 그리고 당신은 비교를 할 수 있습니다.

0

또한 블록으로 열거를 사용할 수 있습니다

[myArray enumerateObjectsUsingBlock:^(id _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { 
    BOOL isLastObject = idx == [myArray count]-1; 
    if (isLastObject){ 
     //... 
    } 
}]; 

당신이 종류의 배열은 적절한 클래스와 id를 교체하는 것이 좋습니다 포함 개체를 알고있는 경우.

관련 문제