2013-10-29 12 views
8

Ho un NSMutableArray di oggetti ordinati, che vengono visualizzati in un UITableView.iOS: Come trovare la posizione di inserimento in NSMutableArray ordinato

Desidero inserire un nuovo oggetto nell'array e aggiornare la vista tabella, che richiede l'indice dell'oggetto appena inserito.

Non riesco a trovare alcun messaggio di sistema per indicarmi l'indice di inserimento corretto nell'array che è necessario aggiornare la vista tabella.

Il meglio che posso trovare è:

  • aggiungere nuovo oggetto
  • sorta
  • utilizzando vecchia copia di array, trovare la posizione del nuovo oggetto (che richiede la ricerca)

o

  • scrivere la mia ricerca per ins posizione

Sicuramente, deve esserci un messaggio per trovare la posizione di inserimento in un array ordinato? O mi manca qualcosa di ovvio qui?

risposta

24

È possibile utilizzare il metodo indexOfObject:inSortedRange:options:usingComparator: sull'intero array. Questo metodo esegue una ricerca binaria su una gamma che si passa, e ti dà il punto di inserimento quando si utilizza l'opzione NSBinarySearchingInsertionIndex:

NSUInteger insPoint = [myArray 
    indexOfObject:toInsert 
    inSortedRange:NSMakeRange(0, [myArray count]) 
    options:NSBinarySearchingInsertionIndex 
    usingComparator:^(id lhs, id rhs) { 
     return // return the result of comparing two objects 
    } 
]; 
+3

Cool. Non sapevo di questo metodo. Grazie per la condivisione. (votato) Come storico temporizzatore relativo allo sviluppo, continuo a rimanere stupito dalla profondità e dall'ampiezza delle strutture Cocoa. –

Problemi correlati