2013-03-04 13 views
8

Mam NSArray. Mam pewną wartość wewnątrz tej tablicy.Jak zmienić wartość indeksu w NSArray

NSArray *testArray = [NSArray arrayWithObjects:@"Test 1", @"Test 2", @"Test 3", @"Test 4", @"Test 5", nil]; 
NSLog(@"%@", testArray); 

Wynik jest jak poniżej:

(
"Test 1", 
"Test 2", 
"Test 3", 
"Test 4", 
"Test 5" 
) 

Teraz chcę wynik takiego:

(
"Test 3", 
"Test 5", 
"Test 1", 
"Test 2", 
"Test 4" 
) 

Czy istnieje jakiś sposób, aby to zrobić bez ponownej inicjalizacji tablicy? Czy mogę zamienić wartość tej tablicy?

+2

nr NSArray jest statyczna jak to jest, więc nie byłoby nawet w stanie dodać cokolwiek do tego, pozostawiając samodzielnie tasowanie wpisów. Chociaż "NSMutableArray" ma funkcję 'sortUsingSelector'. Dzięki tej metodzie możesz określić swój własny porządek sortowania. – ATaylor

+0

@ATaylor: czy jest to możliwe w NSMutableArray? –

+0

@ B.M.W. tak jest możliwe w NSMutableArray .. –

Odpowiedz

6

macierzy musi być instancją NSMutableArray inaczej napisać metody nie są dozwolone (NSArray tylko odczyt)

skorzystać z następujących metod:

- (void)replaceObjectAtIndex:(NSUInteger)index withObject:(id)anObject 

trzeba będzie tymczasowego magazynowania do przechowywania zastępuje obiektu:

id tempObj = [testArray objectAtIndex:index]; 
[testArray replaceObjectAtIndex:index withObject:[testArray objectAtIndex:otherIndex]]; 
[testArray replaceObjectAtIndex:otherIndex withObject:tempObj]; 
+0

Dzięki giorashc .... To działa jak urok. Dzięki za pomoc. –

+19

Możesz użyć 'exchangeObjectAtIndex: withObjectAtIndex:', wtedy nie potrzebujesz tymczasowego obiektu. –

+0

@MartinR: spróbuje ... Dzięki za pomoc ... –

7

Zastosowanie NSMutableArray zamienić dwa obiekty.

- exchangeObjectAtIndex:withObjectAtIndex: 

ta zamienia obiektów w danych tablicy wskaźników (idx1 i idx2)

idx1
Indeks przedmiotu, z którym w celu wymiany tego elementu o indeksie idx2.

idx2
Indeks obiektu do zamiany obiektu na indeks idx1.

SWIFT

func exchangeObjectAtIndex(_ idx1: Int, 
     withObjectAtIndex idx2: Int) 

Objective-C Użyj NSMutableArray

- (void)exchangeObjectAtIndex:(NSUInteger)idx1 
       withObjectAtIndex:(NSUInteger)idx2 

Swapping elements in an NSMutableArray

Powiązane problemy