2011-01-10 14 views
15

Właśnie zaczynam i szukam łatwego sposobu na zsumowanie prostej tablicy. Czytałem na stronie dewelopera Apple o kluczowym kodowaniu wartości i nie rozumiem, jak zastosować to do mojej tablicy lub jeśli jest to odpowiedni sposób na zsumowanie tego.Sumaryczna tablica - Objective-C

Moją przeszkodą z kodowaniem wartości klucza jest .keypathToProperty - mogę zrozumieć, że potrzebna jest dalsza referencja w tablicy 2D, ale nie wyświetlają kodu tablicy, a tylko numer do tytułu hałas, więc nie mogę tego rozgryźć.

NSMutableArray *numArray = [NSMutableArray arrayWithCapacity:4]; 
    [numArray addObject:num1]; 
    [numArray addObject:num2]; 
    [numArray addObject:num3]; 
    [numArray addObject:num4]; 

Doceniam odpowiedzi!

Dzięki

Graham

Odpowiedz

71

automatyczny sposób to zrobić to:

NSNumber * sum = [numArray valueForKeyPath:@"@sum.self"]; 

Ale jeśli dopiero zaczynasz, polecam unikanie operatorów klucz-Path zbiórki i przejść w bardziej prosty sposób:

double sum = 0; 
for (NSNumber * n in numArray) { 
    sum += [n doubleValue]; 
} 
+7

Jezu, nie wiedziałem o '@ sum.self', wow, codziennie przypomina mi się, jak bardzo nie wiem. –

+0

Interesujące są takie klucze, jak "max.self", "min.self" ... Awesome solution .. – Ankit

0

Swift 3: (Dave DeLong's method przekształcona):

let sum = (numArray as AnyObject).value(forKeyPath:"@sum.self") as! Double 

To powinno działać w podobny sposób jak to Objective-C odpowiednik.

+1

Wiem, że robisz to jako przykład użycia keypathów, ale dla nowszych czytelników Swift, Ty może zamiast tego użyć redukcji! 'let sum = numArray.reduce (0) {0 0 + 1 $}' –

+1

@MikeSprague: Nie zgadzam się z tobą, co może być bardziej odpowiednie, chociaż interesuje mnie twoje rozumowanie, dlaczego alternatywna metoda nie powinna " t być przedstawione. Powodem, dla którego podoba mi się ta metoda, jest to, że w odniesieniu do ilości kodu działa całkiem dobrze dla tablicy zawierającej mieszane liczby całkowite i wartości łańcuchowe. –

0

w Swift 4:

let array = [1,2,3,5] 
let sum = array.reduce(0, {$0 + $1}) 
print(sum) 
Powiązane problemy