2011-11-14 10 views
9

Mam NSArray składający NSNumbers i chcę przekonwertować to do NSArray z NSStrings, przez uzyskanie stringValue każdego NSNumber w pierwszej tablicy.lepszy sposób przekonwertować NSArray od NSNumbers do tablicy NSStrings

Metoda, która przychodzi mi do głowy, polega na iteracji każdej wartości w pierwszej, uzyskaniu jej wartości ciągu i dodaniu jej do innej tablicy. Ale powinno być na to bardziej eleganckie rozwiązanie. Czy znasz jednego?

+4

Myślę, że twoje rozwiązanie jest najbardziej eleganckie :-) Ponieważ jest proste i jasne – Victor

+1

Jeśli podejmujesz więcej niż wysiłek, aby znaleźć lepsze rozwiązanie niż 3 linie kodu, które działają optymalnie, to masz za dużo darmowych czas. – morningstar

+3

@morningstar: :) Nie mam tak dużo czasu, ale sytuacja jest odwrotna, ale czasami ramy zapewniają niesamowite metody, których żałowałbyś, że ich nie znasz.i lubisz je znaleźć, jeśli są. – aslisabanci

Odpowiedz

31

NSArray implementuje Key-Value Coding metodę valueForKey: w taki sposób, że zwraca nową tablicę. Nowa tablica zawiera wyniki zapytania każdego obiektu w oryginalnej tablicy o podaną wartość. W tym przypadku, NSNumber ma swój stringValue, więc wszystko co musisz zrobić, to:

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

Plain Old szybko wyliczenie (lub enumerateObjectsUsingBlock:) nie byłoby straszne rozwiązanie, choć. Wdrożenie NSArray implementacji valueForKey: najprawdopodobniej używa wewnętrznej pętli for i byłoby to całkiem zrozumiałe dla każdego, kto przeczyta ją później.

+0

Wow, prawda? Wygląda na to, że jest agresywna, ale jest też niesamowita. – jbat100

+4

Nie nadużywać - całkiem idiomatyczne IMO. Wartość stringValue jest poprawnym atrybutem klasy NSNumber, a valueForKey NSArray: jest celowo zaprojektowany, aby umożliwić transformowanie tablicy w ten sposób. Tak właśnie bym to napisał, niezależnie od tego, co jest warte. – Chuck

+0

Potwierdzam, że działa, +1 ... – jbat100

Powiązane problemy