NSMutableArray *sectionTitles;
[sectionTitles addObject:due];
Come si aggiungono valori univoci a un array?Come posso fare in modo che NSMutableArray accetti solo valori univoci?
NSMutableArray *sectionTitles;
[sectionTitles addObject:due];
Come si aggiungono valori univoci a un array?Come posso fare in modo che NSMutableArray accetti solo valori univoci?
risposta See Rudolph
La mia vecchia risposta qui sotto è ormai superata ed è stato per un po '. Il riferimento di Rudoph a NSOrderedSet
/NSMutableOrderedSet
è quello corretto in quanto queste classi sono state aggiunte dopo questo Q e il mio A.
Vecchio risposta
Come ha detto Richard, NSMutableSet
funziona bene ma solo se non è necessario mantenere una raccolta ordinata. Se fai bisogno di un insieme ordinato un semplice controllo dei contenuti è il meglio che si può fare:
if (![myMutableArray containsObject:newObject])
[myMutableArray addObject:newObject];
aggiornamento sulla base di un commento
Puoi avvolgere questo in un metodo come -addUniqueObject:
e metterlo in un NSMutableArray category.
@ Yar: Questa è un'enorme ipotesi. NSMutableSet non è certamente la "classe giusta" se si desidera mantenere una raccolta * ordinata * (senza aggiungere una proprietà aggiuntiva a qualsiasi oggetto modello che si desidera contenere nell'insieme solo per l'ordinamento). –
@Joshua Nozzi, buon punto, se hai bisogno di ordinare, hai bisogno di un array. –
È possibile utilizzare entrambi, 'NSMutableSet' per query di appartenenza efficienti e' NSMutableArray' per il mantenimento dell'ordine di inserimento. Dovrebbe essere facile incapsulare sia in una singola classe "OrderedSet" (se hai come target Lion, c'è già "NSOrderedSet" per questo scopo). – omz
Più risposta 2012-ish (in caso qualcuno imbatterci in questo in futuro):
Usa NSOrderedSet
e NSMutableOrderedSet
.
Una nota sulle prestazioni direttamente dal NSOrderedSet
documenti:
È possibile utilizzare insiemi ordinati in alternativa agli array quando l'ordine degli elementi è importante e prestazioni nei test se un oggetto è contenuto nel set è un considerazione- test per l'appartenenza a un array è più lento di test per l'appartenenza a un set.
Buon aggiornamento. :-) –
Inoltre, come nota aggiuntiva: non è possibile creare una sottoclasse di NSMutableArray per aggiungere questa funzionalità come NSMutableArray è un cosiddetto cluster di classi: quando si esegue '[[NSMutableArray alloc] init]' (o qualsiasi variazione) si non otterrà un'istanza di NSMutableArray ma di qualche classe concreta che implementa la stessa interfaccia. – DarkDust
Ecco a cosa servono le categorie. :-) Ho una tale categoria per -addUniqueObject: su NSMutableArray. http://developer.apple.com/library/mac/documentation/Cocoa/Conceptual/ObjectiveC/Articoli/ocCategories.html # // apple_ref/doc/uid/TP30001163-CH20-SW1 –
Vedi sotto la risposta di Rudolf per un approccio più moderno che al momento non esisteva Ho risposto a questo. –