2011-11-14 4 views
9

Ho un NSArray composto da NSNumbers e voglio convertire questo a una NSArray di NSStrings, ottenendo il stringValue di ogni NSNumber nel primo array.Meglio modo per convertire NSArray di NSNumbers a schiera di NSStrings

Il metodo che mi viene in mente è l'iterazione di ogni valore nel primo, ottenendo il suo valore di stringa e aggiungendolo in un altro array. Ma dovrebbe esserci una soluzione più elegante per questo. Ne conosci uno?

+4

Penso che la soluzione sia la più elegante :-) Perché è semplice e chiara – Victor

+1

Se stai facendo più di un tentativo per trovare una soluzione migliore rispetto a 3 linee di codice che funzionano in modo ottimale, allora hai troppa libertà tempo. – morningstar

+3

@morningstar: :) Non ho così tanto tempo in realtà la situazione è l'opposto, ma a volte i framework forniscono metodi fantastici che rimpiangeresti di non conoscerli. Mi piace scoprire quelli se ce ne sono. – aslisabanci

risposta

31

NSArray implementa il metodovalueForKey: in modo che restituisca un nuovo array. Il nuovo array contiene i risultati della richiesta di ciascun oggetto nell'array originale per il valore specificato. In questo caso, ha il suo NSNumberstringValue, quindi tutto quello che dovete fare è:

NSArray * b = [a valueForKey:@"stringValue"]; 

Plain enumerazione veloce vecchio (o enumerateObjectsUsingBlock:) non sarebbe una soluzione terribile, però. L'implementazione di NSArray di valueForKey: utilizza molto probabilmente internamente un ciclo for e questo sarebbe facilmente comprensibile a chiunque lo leggerà in seguito.

+0

Wow, lo fa davvero? Sembra abusivo ma è anche fantastico. – jbat100

+4

Non offensivo - completamente idiomatico IMO. Lo stringValue è un attributo valido della classe NSNumber e valueForKey di NSArray: è intenzionalmente progettato per consentire la trasformazione di un array in questo modo. Questo è esattamente come lo scriverei, per quello che vale. – Chuck

+0

Confermo che funziona, +1 ... – jbat100

Problemi correlati