Qual é a maneira mais fácil (melhor) de encontrar a soma de uma matriz de números inteiros rapidamente? Eu tenho uma matriz chamada múltiplos e gostaria de saber a soma dos múltiplos.
228
Este é o método mais fácil / mais curto que posso encontrar.
Swift 3 e Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Mais algumas informações:
Isso usa o método de redução da matriz (documentação aqui ), que permite "reduzir uma coleção de elementos para um único valor aplicando recursivamente o fechamento fornecido". Damos 0 como o valor inicial e, em seguida, essencialmente, o fechamento { $0 + $1 }
. Obviamente, podemos simplificar isso para um único sinal de mais, porque é assim que o Swift rola.
let totalSum = self.cheques.reduce(0) { $0 + $1.amount}
combine
. Deveria sermultiples.reduce(0, combine: +)
.flatMap
primeiro para achatá-lo em uma matriz de dimensão única.multiArray.flatMap{$0}.reduce(0, combine: +)
Swift 3+ um liner para somar propriedades dos objetos
Onde points é a propriedade em meu objeto personalizado scaleData que estou tentando reduzir
fonte
Swift3 mudou para:
fonte
No Swift 4, você também pode restringir os elementos da sequência ao protocolo numérico para retornar a soma de todos os elementos na sequência, conforme a seguir
editar / atualizar:
Xcode 10.2 • Swift 5 ou posterior
Podemos simplesmente restringir os elementos da sequência ao novo protocolo AdditiveArithmetic para retornar a soma de todos os elementos na coleção
Xcode 11 • Swift 5.1 ou posterior
fonte
Isso também funciona:
O resultado será: 55
fonte
Exemplo do Swift 4
fonte
Swift 3
Se você possui uma matriz de objetos genéricos e deseja somar alguma propriedade do objeto, então:
Apesar da forma mais curta, muitas vezes você pode preferir o ciclo for-clássico:
fonte
Que tal a maneira simples de
// onde n = número de elementos na matriz
fonte
var sum = 0 ; for n in multiples { sum += n }
embora eu usaria reduzir.Uma solução possível: defina um operador de prefixo para ele. Como o operador de redução "+ /" como no APL (por exemplo, GNU APL)
Um pouco de uma abordagem diferente aqui.
O uso de um protocolo em um tipo genérico nos permite usar esse operador nos tipos de matriz Double, Float e Int
use assim:
(atualizado para Swift 2.2, testado no Xcode versão 7.3)
fonte
Swift 3.0
eu tive o mesmo problema, encontrei na documentação Apple esta solução.
Mas, no meu caso, eu tinha uma lista de objetos, então eu precisava transformar meu valor da minha lista:
este trabalho para mim.
fonte
usou este para parâmetros aninhados
fonte
Mantenha simples...
Resultado:
fonte
Para mim, era assim usando propriedade
fonte
Swift 3
De todas as opções exibidas aqui, essa é a que funcionou para mim.
fonte
Para soma dos elementos na matriz de objetos
fonte
esta é a minha abordagem sobre isso. no entanto, acredito que a melhor solução é a resposta do nome de usuário do usuário tbd
fonte