Mi chiedo quale sia la decisione dietro il metodo NSDictionary allKeys, per restituire un NSArray, anziché un NSSet, che avrebbe più senso, poiché non vi è alcuna garanzia sull'ordine dell'array restituito e inoltre, una chiave è unicaNSDictionary allKeys restituisce NSArray, anziché NSSet
risposta
Beh, come tutti sono indovinare ...
Come ha detto il PO, ogni chiave è unica. Per l'array o il set case il codice del dizionario deve raccogliere le chiavi - il costo di questo si applica a entrambi. Nel set caso ogni chiave deve essere aggiunta al set, il che implica un test (inutile a quanto risulta) dell'adesione, mentre nel caso dell'array non è richiesto alcun test di appartenenza - il costo dell'aggiunta a un array deve essere minore di aggiungendo a un set. Array vince.
Il tuo dire un inserimento NSSet richiederebbe una ricerca duplicata O (n)? Se Apple fosse così preoccupata delle prestazioni di NSSet, perché la userebbero in molti casi, ma non in questo caso. –
Uno sguardo al codice sorgente mi mostra che usano la tabella di hash O (1) per NSSet. La risoluzione duplicata non ha alcun impatto. –
@JustinMeiners - Non ho menzionato con attenzione O() ;-) Ma stai dicendo che hai esaminato il sorgente o l'array e impostato e determinato il costo del controllo è * zero * e che sans-controlla il costo dell'aggiunta un oggetto in un array e in un set sono uguali? Ma a meno che non ci siano commenti nel codice, ognuno si sta semplicemente divertendo qui, si possono fare delle discussioni per entrambe le scelte - e potrebbe anche essere stato arbitrario. – CRD
E, a parte quello che ha detto Justin, se in realtà volevi un elenco di chiavi del dizionario dovresti ottenere l'NSSet e poi convertirlo in un NSArray. Se vuoi semplicemente testare l'esistenza della chiave, OTOH, puoi andare direttamente contro il dizionario e non hai bisogno del set.
- 1. NSDictionary allKeys - restituisce sempre lo stesso ordine?
- 2. NSDictionary allKeys order
- 3. NSDictionary a NSArray?
- 4. NSDictionary vs. NSArray
- 5. NSDictionary allKeys crash - non può capire le circostanze relazione crash
- 6. Inserire NSArray in un NSDictionary
- 7. Cocoa NSArray/NSSet: -makeObjectsPerformSelector: vs enumerazione rapida
- 8. NSSet to NSArray casting calling objectAtIndex?
- 9. Abbellisci NSLog di NSArray e NSDictionary
- 10. Codifica NSArray o NSDictionary usando NSCoder
- 11. NSArray of NSDictionary - Sintassi di inizializzazione semplice
- 12. Ordina NSArray di oggetti NSDictionary in Swift
- 13. Filtraggio NSArray di oggetti NSDictionary utilizzando NSPredicate
- 14. L'array allKeys di NSDictionary è incasinato - non nell'ordine in cui si trovano nel dizionario?
- 15. Creazione di un NSSet da NSArray in base alla proprietà
- 16. Tasti di stampa di NSDictionary anziché valori
- 17. Ordinamento di un NSArray da un valore NSDictionary
- 18. Il modo migliore per ordinare un NSArray di oggetti NSDictionary?
- 19. AFNetworking restituisce un oggetto _NSCFData anziché JSON
- 20. NSArray: lastObject restituisce un oggetto autoreleased?
- 21. Conversione di NSArray in NSSet, trasferimento di istanze di classi personalizzate in modo incoerente
- 22. Ordina NSArray contenente AAO
- 23. NSDictionary writeToFile
- 24. Trova duplicati in NSArray
- 25. Il lato sinistro per un operatore ALL o ANY deve essere un NSArray o un NSSet
- 26. NSPredicate 'Il lato sinistro per un operatore ALL o ANY deve essere un NSArray o NSSet'
- 27. Come configurare KVO su una raccolta (NSArray o NSSet) di NSManagedObjects
- 28. NSDictionary to XML
- 29. come ottenere la chiave dal rispettivo valore in un NSDictionary?
- 30. "NSSet allObjects" esegue l'ordinamento casuale?
Obiezione; Speculazione! –
Questo non è principalmente basato sull'opinione, e ci sono tonnellate di precedenti per domande simili. –
Anche se esiste un precedente per una tale domanda, non stai chiedendo agli sviluppatori originali e tutte le risposte possono essere solo speculazioni. Per questo, questo è il codice NextStep che stai chiedendo. La risposta potrebbe essere "compatibilità API con un tempo molto precedente rispetto a quello che si sta considerando". –