Kotlin用泛型计算标准偏差

问题描述 投票:0回答:1

我想写一个方法来计算标准偏差与提供的数字。

这是它的样子:

fun calculateSD(numArray: List<Int>): Double {
var sum = 0.0
var standardDeviation = 0.0

for (num in numArray) {
    sum += num
}

val mean = sum / numArray.size

for (num in numArray) {
    standardDeviation += Math.pow(num - mean, 2.0)
}

val divider = numArray.size - 1

return Math.sqrt(standardDeviation / divider)
}

但是,我希望这也适用于Double,Float等列表。

所以它需要使用泛型:

fun <T>calculateSD(numArray: List<T>): Double {
var sum = 0.0
var standardDeviation = 0.0

for (num in numArray) {
    sum += num
}

val mean = sum / numArray.size

for (num in numArray) {
    standardDeviation += Math.pow(num - mean, 2.0)
}

val divider = numArray.size - 1

return Math.sqrt(standardDeviation / divider)
}

但是当我尝试这样做时,我得到了Android Studio IDE错误,它强调了'+ ='运算符和' - '运算符。

我怎样才能使它工作?

generics math kotlin
1个回答
3
投票

没有很好的方法可以按照你想象的方式对不同的数字类型进行泛化; qazxsw poi,qazxsw poi等只延伸qazxsw poi和Int,两者都没有定义Double

但是,在您的特定用例中,您可以利用累加器变量始终为Number的事实:

Comparable

FWIW,你可以摆脱显式循环:

operator plus

或者因此:

Double
© www.soinside.com 2019 - 2024. All rights reserved.