Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

264
Views
Suma de la matriz que contiene la clase personalizada (Swift)

Estoy pensando en una manera de obtener la suma de los valores de las clases que están contenidas en una matriz. Mi configuración es la siguiente:

 class CustomClass { var value: Int? init(value: Int) { self.value = value } }

 let object1 = CustomClass(value: 2) let object2 = CustomClass(value: 4) let object3 = CustomClass(value: 8) let array: [CustomClass] = [object1, object2, object3]

Mi solución actual es la siguiente:

 var sumArray = [Int]() for object in array { sumArray.append(object.value!) } let sum = sumArray.reduce(0, +)

El problema es que se vuelve muy complejo con clases con muchos otros valores, ¿alguien sabe una solución mejor?

over 4 years ago · Santiago Trujillo
3 answers
Answer question

0

Puede compactMap su matriz de clase personalizada en una matriz de enteros y luego reducir esa matriz a su suma. Me gusta,

 let sum = array.lazy.compactMap { $0.value } .reduce(0, +)
over 4 years ago · Santiago Trujillo Report

0

Puede usar una sola reduce en la array .

 let sumOfValues = array.reduce({$0 += ($1.value ?? 0)})
over 4 years ago · Santiago Trujillo Report

0

Crearía un protocolo para su clase o estructuras que contenga un valor. Y cambie su declaración a no opcional.

 protocol Valueable { var value: Int { get } }

Luego, deberá hacer que su clase se ajuste a ese protocolo:

 class CustomClass: Valueable { let value: Int init(value: Int) { self.value = value } }

Ahora puede ampliar el protocolo de recopilación con una propiedad de instancia de solo lectura para devolver la suma de todos los elementos de su matriz.

 extension Collection where Element: Valueable { var sum: Int { return reduce(0) { $0 + $1.value } } }

 let object1 = CustomClass(value: 2) let object2 = CustomClass(value: 4) let object3 = CustomClass(value: 8) let objects = [object1, object2, object3] let sum = objects.sum // 14

editar/actualizar:

Otra opción es extender la secuencia y agregar un método de suma genérico que acepte una ruta clave cuya propiedad se ajuste a AdditiveArithmetic


o agregue un tipo asociado al protocolo que se ajuste a AdditiveArithmetic:

 protocol Valueable { associatedtype Value: AdditiveArithmetic var value: Value { get } }

 extension Collection where Element: Valueable { var sum: Element.Value { reduce(.zero) { $0 + $1.value } } }

 class CustomClass: Valueable { let value: Decimal init(value: Decimal) { self.value = value } }

Uso:

 let object1 = CustomClass(value: 123.4567) let object2 = CustomClass(value: 12.34567) let object3 = CustomClass(value: 1.234567) let objects = [object1, object2, object3] let sum = objects.sum // 137.036937
over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!