Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

260
Vistas
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 Respuestas
Responde la pregunta

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 Denunciar

0

Puede usar una sola reduce en la array .

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

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 Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda