Comment écrire la méthode de calcul de la moyenne en Swift-aire de jeu
Dans swift, je suis en train d'écrire une méthode pour calculer la moyenne. À l'aide de la méthode ci-dessous si j'type de la moyenne(5,10,15) - je obtenir de l'infini affiché dans la swift-playforund
func average(numbers: Int...) -> Double {
var sum = 0
var count = 0
for number in numbers {
sum += number
}
var ave : Double = Double(sum) / Double(count)
return ave
}
OriginalL'auteur user1898829 | 2014-06-09
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser la propriété count de la matrice:
Ne serait pas plus élégant d'utiliser les réduire? func moyenne(ns:Int...) { return Double(ns.réduire(0) { $0.0 + $0.1 }) / Double(ns.le comte) }
Swift 3:
func average(numbers: Int...) -> Double { return Double(numbers.reduce(0, +)) / Double(numbers.count) }
Juste pour la fin: la moyenne est également appelé "arithmeticMean" Côté question: serait-il possible de créer un générique de la méthode d'avg? de sorte qu'il pourrait fonctionner pour les Int,CGFloat,Double et l'aime?
OriginalL'auteur Jens Wirth
C'est tellement plus facile avec juste un simple appel à
reduce
:Attention: Si cette approche se fait à l'aide de
Int
type, au lieu deDouble
, si la taille de la matrice est grande, la$1/array.count
sera de 0 à chaque fois, résultant dans la moyenne apparaissant à zéro. UtilisationDouble
à chaque fois! Réponse très bien.Il est plus efficace to1st réduire et ensuite de diviser une fois par le comte. C'est aussi une solution plus élégante.
OriginalL'auteur GarlicFries
Tandis que d'autres l'ont déjà souligné le manque compter de la variable, il est intéressant de noter que vous pouvez faire la moyenne, même plus élégamment en utilisant des fermetures comme suit:
Édité pour Swift 4:-
Cela ne fonctionne pas plus.
Édité pour Swift 4 - fonctionne de nouveau.
OriginalL'auteur Maria Zverina
Il suffit d'écrire
count = count +1
dans votrefor
boucle.Tels comme,,,
Et fonctionnent désormais par
OriginalL'auteur iPatel
Vous oublier d'incrémenter le comte dans la boucle interne.
OriginalL'auteur Anton Gogolev
Vous obtenez à l'infini parce que
count
est toujours 0 - il n'est jamais incrémenté. Ainsi, leave
variable est toujours va être égale à un nombre de plus de 0, ce qui est une erreur de division par zéro.Utiliser
countElements(numbers)
ou de l'incrément compter sur chaque itération de la boucle.OriginalL'auteur Bill
Voici ce que j'ai fait:
Noter que je l'accepte Double comme entrée, et pas seulement Ints. Je suis un peu bavard à la fin, mais j'ai essayé pour un code lisible. J'aurais probablement pu tout juste de retour:
à la fin et sauvé quelques lignes de code.
OriginalL'auteur james Burns
cochez cette méthode.
OriginalL'auteur Vineesh TP
Swift 3, style fonctionnel
OriginalL'auteur wcochran
Si vous aimez la
extension
!OriginalL'auteur Léo Derbois