Quelle est la façon la plus simple (la meilleure) de trouver la somme d'un tableau d'entiers dans swift? J'ai un tableau appelé multiples et je voudrais connaître la somme des multiples.
229
C'est la méthode la plus simple / la plus courte que je puisse trouver.
Swift 3 et Swift 4:
let multiples = [...]
let sum = multiples.reduce(0, +)
print("Sum of Array is : ", sum)
Swift 2:
let multiples = [...]
sum = multiples.reduce(0, combine: +)
Quelques informations supplémentaires:
Cela utilise la méthode de réduction d'Array (documentation ici ), qui vous permet de "réduire une collection d'éléments à une seule valeur en appliquant récursivement la fermeture fournie". Nous lui donnons 0 comme valeur initiale, puis, essentiellement, la fermeture { $0 + $1 }
. Bien sûr, nous pouvons simplifier cela en un seul signe plus, car c'est ainsi que Swift roule.
let totalSum = self.cheques.reduce(0) { $0 + $1.amount}
combine
. Devrait l'êtremultiples.reduce(0, combine: +)
.flatMap
dessus pour l'aplatir en un tableau à une dimension.multiArray.flatMap{$0}.reduce(0, combine: +)
Swift 3+ one liner pour additionner les propriétés des objets
Où les points sont la propriété dans mon échelle d' objet personnalisé Données que j'essaie de réduire
la source
Swift3 est devenu:
la source
Dans Swift 4, vous pouvez également contraindre les éléments de séquence au protocole numérique pour renvoyer la somme de tous les éléments de la séquence comme suit
éditer / mettre à jour:
Xcode 10.2 • Swift 5 ou version ultérieure
Nous pouvons simplement contraindre les éléments de séquence au nouveau protocole AdditiveArithmetic pour renvoyer la somme de tous les éléments de la collection
Xcode 11 • Swift 5.1 ou version ultérieure
la source
Cela fonctionne également:
Le résultat sera de: 55
la source
Exemple Swift 4
la source
Swift 3
Si vous avez un tableau d'objets génériques et que vous souhaitez additionner une propriété d'objet, alors:
Malgré la forme plus courte, vous préférerez souvent le classique pour le cycle:
la source
Que diriez-vous de la manière simple de
// où n = nombre d'éléments dans le tableau
la source
var sum = 0 ; for n in multiples { sum += n }
même si j'utiliserais réduire.Une solution possible: définir un opérateur de préfixe pour cela. Comme l'opérateur de réduction "+ /" comme dans APL (par exemple GNU APL)
Un peu d'une approche différente ici.
L'utilisation d'un protocole de type générique nous permet d'utiliser cet opérateur sur les types de tableaux Double, Float et Int
utiliser comme ça:
(mis à jour pour Swift 2.2, testé dans Xcode version 7.3)
la source
Swift 3.0
j'ai eu le même problème, j'ai trouvé sur la documentation Apple cette solution.
Mais, dans mon cas, j'avais une liste d'objets, alors j'avais besoin de transformer ma valeur de ma liste:
ce travail pour moi.
la source
utilisé celui-ci pour les paramètres imbriqués
la source
Rester simple...
Production:
la source
Pour moi, c'était comme ça en utilisant la propriété
la source
Swift 3
De toutes les options affichées ici, c'est celle qui a fonctionné pour moi.
la source
Pour la somme des éléments dans un tableau d'objets
la source
c'est mon approche à ce sujet. mais je pense que la meilleure solution est la réponse du nom d' utilisateur tbd
la source