Aufbauend auf diesem question, ich versuche, die Varianz eines Arrays von Int zu berechnen.Beispielvariation für ein Array von Int in Swift
Meine Erweiterung sieht wie folgt aus so weit:
extension Array where Element: Integer {
/// Returns the sum of all elements in the array
var total: Element {
return reduce(0, combine: +)
}
/// Returns the average of all elements in the array
var average: Double {
return isEmpty ? 0 : Double(total.hashValue)/Double(count)
}
/// Returns an array of the squared deviations from the mean
var squaredDeviations: [Double] {
let mean = average
return isEmpty ? 0 : map({ number in
let difference = Double(number) - mean
return pow(distance, 2)
})
}
}
Gesamt und durchschnittliche Arbeit in Ordnung, aber für squaredDifferences scheint es, dass Sie den gleichen Typ wie das Array zurückgeben muss, wenn map
verwenden. Gibt es eine Möglichkeit, dies zu umgehen?
aktualisiert I den Compiler-Fehler erhielt:
Result values in '? :" expression have mismatching types 'Int' and '[ _ ]'
Das Problem war, dass I 0 zurückkehren, das nicht eine Reihe von Doubles ist. Außerdem habe ich number.hashValue nicht verwendet und konnte daher das Double nicht initialisieren.
't scheint, dass Sie den gleichen Typ wie das Array bei der Verwendung von map zurückgeben müssen" Nicht wahr, Karte existiert hauptsächlich um nur zu erleichtern, die Konvertierung zwischen den Typen. – Alexander
"Es scheint, dass Sie den gleichen Typ wie das Array zurückgeben müssen, wenn Sie map verwenden" Nein, es gibt keine solche Regel. Sie können einen beliebigen Typ aus Ihrer 'map' -Funktion zurückgeben. Und tatsächlich tust du das: eine ganze Zahl kommt herein und ein Doppel kommt heraus. Ist das dein echter Code ??? Was genau ist das Problem? – matt
Das Problem ist, dass, wenn das Array leer ist, Sie versuchen, "0" zurückzugeben, die kein Array von Double ist. – Eduardo