科特林计算与generics的标准差

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

这里是这样的:

fun calculateSD(numArray: List): 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) } 

但是,我想这也工作列表双,浮动等

所以它需要使用generics

 fun calculateSD(numArray: List): 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错误,这强调了“+ =”运算符和“ – ”运算符。

我怎样才能使它工作?

One Solution collect form web for “科特林计算与generics的标准差”

没有什么好的方法可以用你想象的方式来泛化不同的数字types。 IntDouble等仅扩展NumberComparable ,两者都不定义operator plus

然而,在你的特定用例中,你可以利用这个事实,即你的累加器variables总是为Double

 fun  calculateSD(numArray: List): Double { // ^^^^^^ // ... code code code ... for (num in numArray) { sum += num.toDouble() // This *is* available via Number interface } // ... code code code ... } 

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

 val sum = numArray.sumByDouble { it.toDouble() } 

或者如此:

 val sum = numArray .map { it.toDouble() } .sum() 
  • 最好的方法来处理这种情况下,“聪明的演员是不可能的”
  • Kotlin集合图导致“types检查已经运行成Kotlin递归”错误
  • 如何将字符串转换为字符在Kotlin?
  • 错误:执行任务':app:compileDebugKotlin'失败。 >编译错误。 查看日志了解更多详情
  • 如何在Kotlin中声明一个函数作为variables
  • 在Kotlin中为variables使用“m”前缀
  • 与Kotlin 12编译时函数声明错误
  • 是否可以为参数函数定义一个默认值?
  • 如何在没有spring-boot的情况下在spring-webflux中加载配置?
  • 如何创建BLE设备的模拟器通过蓝牙进行通信?
  • 如何在Kotlin中实现setOnClickListener?
  • Kotlin language will be the best programming language for Android.