2011-11-14 8 views
9

tengo una NSArray que consiste en NSNumbers y quiero convertir esto en un NSArray de NSStrings, al recibir la stringValue de cada NSNumber en la primera matriz.mejor manera de convertir NSArray de NSNumbers al conjunto de NSStrings

El método que me viene a la mente es iterar cada valor en el primero, obtener su valor de cadena y agregarlo a otra matriz. Pero debería haber una solución más elegante para esto. ¿Conoces uno?

+4

Creo que su solución es más elegante :-) Porque es simple y claro – Victor

+1

Si está haciendo más que un esfuerzo pasajero para encontrar una solución mejor que 3 líneas de código que funciona de manera óptima, entonces tiene demasiada libertad hora. – morningstar

+3

@morningstar: :) no tengo tanto tiempo, en realidad la situación es la contraria, pero a veces los marcos proporcionan métodos asombrosos de los que te arrepentirías si no los conocieras. Me gusta averiguarlos si los hay. – aslisabanci

Respuesta

31

NSArray implementa el método Key-Value CodingvalueForKey: de forma tal que devuelve una nueva matriz. La nueva matriz contiene los resultados de preguntar a cada objeto en la matriz original por el valor especificado. En este caso, NSNumber tiene su stringValue, por lo que todo lo que tiene que hacer es:

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

viejo y simple enumeración rápida (o enumerateObjectsUsingBlock:) no serían una solución terribles, sin embargo. La implementación de NSArray de valueForKey: muy probablemente usa un bucle for internamente, y eso sería bastante fácil de entender para cualquiera que lo lea más tarde.

+0

Guau, ¿verdad? Parece abusivo, pero también es increíble. – jbat100

+4

No abusivo - IMO bastante idiomático. El stringValue es un atributo válido de la clase NSNumber, y valueForKey de NSArray: está intencionalmente diseñado para permitir transformar una matriz de esta manera. Así es exactamente como lo escribiría, por lo que sea que valga la pena. – Chuck

+0

Confirmo que funciona, +1 ... – jbat100

Cuestiones relacionadas