2013-03-04 16 views
8

Ho NSArray. Ho un certo valore all'interno di quell'array.Come scambiare l'indice dei valori in NSArray

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

Risultato è come muggito:

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

Ora voglio il risultato come questo:

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

Esiste un modo per farlo senza ri-inizializzare l'array? Posso scambiare il valore di questo array?

+2

No. NSArray è statico come è, in modo da non essere ancora in grado di aggiungere qualcosa, lasciato solo mescolando le voci. Sebbene "NSMutableArray" abbia una funzione 'sortUsingSelector'. Con questo metodo, è possibile determinare il proprio ordine di smistamento. – ATaylor

+0

@ATaylor: è possibile in NSMutableArray ?? –

+0

@ B.M.W. sì è possibile in NSMutableArray .. –

risposta

6

tuo array deve essere un'istanza di un NSMutableArray altrimenti scrivere metodi non sono ammessi (NSArray è solo lettura)

Usa il seguente metodo:

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

avrete bisogno di un deposito temporaneo per la memorizzazione del sostituisce oggetto:

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

Grazie giorashc .... È un lavoro come il fascino. Grazie per l'aiuto. –

+19

È possibile utilizzare 'exchangeObjectAtIndex: withObjectAtIndex:', quindi non è necessario un oggetto temporaneo. –

+0

@MartinR: lo proverò ... Grazie per l'aiuto ... –

7

Uso NSMutableArray per scambiare due oggetti.

- exchangeObjectAtIndex:withObjectAtIndex: 

Questo scambia gli oggetti nell'array a indici trovati (IDX1 e idx2)

IDX1
L'indice dell'oggetto con cui sostituire l'oggetto all'indice idx2.

idx2
L'indice dell'oggetto con cui sostituire l'oggetto all'indice idx1.

SWIFT

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

Objective-C Utilizzare un NSMutableArray

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

Swapping elements in an NSMutableArray