¿Cuál es la forma más fácil (mejor) de encontrar la suma de una matriz de enteros en Swift? Tengo una matriz llamada múltiplos y me gustaría saber la suma de los múltiplos.
229
Este es el método más fácil / más corto que puedo encontrar.
Swift 3 y Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Alguna información más:
Utiliza el método de reducción de Array (documentación aquí ), que le permite "reducir una colección de elementos a un solo valor aplicando recursivamente el cierre proporcionado". Le damos 0 como valor inicial, y luego, esencialmente, el cierre { $0 + $1 }
. Por supuesto, podemos simplificar eso a un solo signo más, porque así es como funciona Swift.
let totalSum = self.cheques.reduce(0) { $0 + $1.amount}
combine
. Debe sermultiples.reduce(0, combine: +)
.flatMap
en él primero para aplanarlo a una matriz de una sola dimensión.multiArray.flatMap{$0}.reduce(0, combine: +)
Swift 3+ un revestimiento para sumar propiedades de objetos
Donde puntos es la propiedad en mi objeto personalizado scaleData que estoy tratando de reducir
fuente
Swift3 ha cambiado a:
fuente
En Swift 4 también puede restringir los elementos de secuencia al protocolo numérico para devolver la suma de todos los elementos de la secuencia de la siguiente manera
editar / actualizar:
Xcode 10.2 • Swift 5 o posterior
Simplemente podemos restringir los elementos de secuencia al nuevo protocolo AdditiveArithmetic para devolver la suma de todos los elementos de la colección.
Xcode 11 • Swift 5.1 o posterior
fuente
Esto también funciona:
El resultado será: 55
fuente
Swift 4 ejemplo
fuente
Swift 3
Si tiene una matriz de objetos genéricos y desea sumar alguna propiedad del objeto, entonces:
A pesar de la forma más corta, muchas veces puede preferir el ciclo clásico:
fuente
¿Qué tal la forma simple de
// donde n = número de elementos en la matriz
fuente
var sum = 0 ; for n in multiples { sum += n }
aunque usaría reduce.Una posible solución: definir un operador de prefijo para él. Como el operador de reducción "+ /" como en APL (por ejemplo, GNU APL)
Un enfoque un poco diferente aquí.
El uso de un protocolo en tipo genérico nos permite usar este operador en los tipos de matriz Doble, Flotante e Int.
usar así:
(actualizado para Swift 2.2, probado en Xcode versión 7.3)
fuente
Swift 3.0
Tuve el mismo problema, encontré en la documentación de Apple esta solución.
Pero, en mi caso, tenía una lista de objetos, luego necesitaba transformar el valor de mi lista:
este trabajo para mi
fuente
usado este para parámetros anidados
fuente
Mantenlo simple...
Salida:
fuente
Para mí, fue así usando la propiedad
fuente
Swift 3
De todas las opciones que se muestran aquí, esta es la que funcionó para mí.
fuente
Para la suma de elementos en una matriz de objetos
fuente
Este es mi enfoque sobre esto. Sin embargo, creo que la mejor solución es la respuesta del nombre de usuario tbd
fuente