임시 배열을 만들지 않고 객체를 nsmutablearray에서 바꿀 수 있습니까?
-
08-07-2019 - |
문제
나는 그것을 가지고 있다고 생각했다.
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
제휴하지 않습니다 StackOverflow