2011-01-10 8 views
15

Estoy empezando y estoy buscando una manera fácil de sumar una matriz simple. He leído en el sitio para desarrolladores de Apple la clave de codificación de valores y no entiendo cómo aplicar eso a mi matriz o si esa es la forma adecuada de sumar esto.Sumar una matriz - Objective-C

Mi obstáculo con la clave de codificación de valor es .keypathToProperty - Puedo entender que necesita una referencia adicional en una matriz 2D pero no muestran el código de la matriz, solo el recorrido de la tecla al título de la fila así que no puedo resolverlo todavía.

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

¡Agradezco las respuestas!

Gracias

Graham

Respuesta

71

La forma automática de hacerlo es:

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

Pero si usted está empezando a cabo, recomendaría evitando los operadores clave en rutas de acceso de recogida e ir para la manera más simple:

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

Por Dios, yo no sabía nada de '@ sum.self', guau, todos los días me acuerdo de lo mucho que no sé. –

+0

Curiosamente, hay claves tales como "max.self", "min.self" ... Solución impresionante ... – Ankit

0

Swift 3: (Dave DeLong's method transformados):

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

Esto debería funcionar de una manera similar a la que es Objective-C contraparte.

+1

Sé que lo está haciendo como un ejemplo del uso de keypaths, pero para cualquier lector Swift más nuevo, ¡podría querer usar un reductor en su lugar! 'let sum = numArray.reduce (0) {$ 0 + $ 1}' –

+1

@MikeSprague: No estoy en desacuerdo con usted sobre cuál podría ser más apropiado, aunque me interesa su razonamiento sobre por qué un método alternativo no debería ' t ser presentado. La razón por la que me gusta este método es que para la cantidad de código involucrado funciona bastante bien para una matriz que contiene enteros mixtos y valores de cadena. –

0

En Swift 4:

let array = [1,2,3,5] 
let sum = array.reduce(0, {$0 + $1}) 
print(sum) 
Cuestiones relacionadas