Saltar al contenido

Encontrar la suma de elementos en Swift array

Después de consultar expertos en esta materia, programadores de diversas ramas y profesores dimos con la respuesta a la interrogande y la compartimos en esta publicación.

Solución:

Este es el método más fácil/más corto que puedo encontrar.

Rápido 3 y Rápido 4:

let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)

Rápido 2:

let multiples = [...]
sum = multiples.reduce(0, combine: +)

Algo más de información:

Esto 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 provisto”. Le damos 0 como valor inicial, y luego, esencialmente, el cierre $0 + $1 . Por supuesto, podemos simplificarlo a un solo signo más, porque así funciona Swift.

Rápido 3+ un trazador de líneas para sumar las propiedades de los objetos

var totalSum = scaleData.map($0.points).reduce(0, +)

Donde puntos es la propiedad en mi objeto personalizado scaleData que estoy tratando de reducir

En rápido 4 También puede restringir los elementos de la secuencia al protocolo numérico para devolver la suma de todos los elementos de la secuencia de la siguiente manera

extension Sequence where Element: Numeric 
    /// Returns the sum of all elements in the collection
    func sum() -> Element  return reduce(0, +) 


editar/actualizar:

Xcode 10.2 • Swift 5 o posterior

Simplemente podemos restringir los elementos de la secuencia al nuevo protocolo AdditiveArithmetic para devolver la suma de todos los elementos de la colección.

extension Sequence where Element: AdditiveArithmetic 
    func sum() -> Element 
        return reduce(.zero, +)
    


Xcode 11 • Swift 5.1 o posterior

extension Sequence where Element: AdditiveArithmetic 
    func sum() -> Element  reduce(.zero, +) 


let numbers = [1,2,3]
numbers.sum()    // 6

let doubles = [1.5, 2.7, 3.0]
doubles.sum()    // 7.2

Para sumar una propiedad de un objeto personalizado, podemos extender Sequence para tomar un predicado para devolver un valor que se ajuste a AdditiveArithmetic:

extension Sequence  
    func sum(_ predicate: (Element) -> T) -> T  reduce(.zero)  $0 + predicate($1)  


Uso:

struct Product 
    let id: String
    let price: Decimal


let products: [Product] = [.init(id: "abc", price: 21.9),
                           .init(id: "xyz", price: 19.7),
                           .init(id: "jkl", price: 2.9)
]

products.sum(.price)  // 44.5

Reseñas y puntuaciones

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *