문제

나는 그것을 가지고 있다고 생각했다.

void shiftArray(NSMutableArray *mutableArray, NSUInteger shift)
{
    for (NSUInteger i = 0; i < [mutableArray count]; i++) {
        NSUInteger newIndex = (i + shift) % [mutableArray count];
        [mutableArray exchangeObjectAtIndex:i withObjectAtIndex:newIndex];
    }
}

내가 하나씩 이동할 때 0,1,2,3,4를 0,2,3,4,1로 바꿉니다.

예상 결과는 4,0,1,2,3입니다

분명한 것을 놓치고있는 것 같아요 ...

업데이트: 감사합니다 Matthieu, 이것이 내 기능의 모습입니다.

void shiftArrayRight(NSMutableArray *mutableArray, NSUInteger shift) {
    for (NSUInteger i = shift; i > 0; i--) {
        NSObject *obj = [mutableArray lastObject];
        [mutableArray insertObject:obj atIndex:0];
        [mutableArray removeLastObject];
    }
}

나는 당신이 일반적인 nsobject를 만들고 서브 클래스를 넣을 수 있다는 것을 몰랐습니다. 그것은 모두 포인터이므로 괜찮다고 생각합니다.

이 대상을 생각하는 습관을 깨는 것은 어렵습니다. 바지 보다는 것보다 포인터 가방에.

도움이 되었습니까?

해결책

같은 것을 시도하십시오

for (NSUInteger i = shift; i > 0; i--) {
   NSObject* obj = [mutableArray lastObject];
   [mutableArray insertObject:obj atIndex:0];
   [mutableArray removeLastObject];
}

경고 - 나는 그 코드를 테스트하지 않았지만 문제를 해결하는 데 도움이 될 것입니다.

다른 팁

알고리즘을 다시 살펴 봐야합니다. 루프를 통해 매번 하나의 항목을 다음 항목으로 교환합니다.

0,1,2,3,4
1,0,2,3,4
1,2,0,3,4
1,2,3,0,4
1,2,3,4,0
0,2,3,4,1

원하는 작업을 수행 할 수 있지만 올바른 결과를 얻으려면 단계를 주문하는 방법과 종속성에 대해 생각해야합니다. 사소한 경우, 끝까지 뒤로 작업 할 수 있습니다.

0,1,2,3,4
4,1,2,3,0
4,1,2,0,3
4,1,0,2,3
4,0,1,2,3

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top