Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

254
Visualizações
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 Respostas
Responde à pergunta

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 Relatório

0

Puede usar una sola reduce en la array .

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

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 Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda