科特林计算与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() 
  • 即使使用noarg插件,也没有使用Kotlin的JPA实体的默认构造函数
  • Kotlin Foo :: class.java“Unresolved Reference:Java”错误
  • Kotlin空课的目的是什么?
  • 将Kotlin文件转换为java,向其中添加java代码并将其转换回Kotlin,就像直接向Kotlin文件添加代码一样?
  • Kotlin:如何在类中使用多个Generic?
  • 使用Kotlin for Android进行数据绑定问题
  • Kotlin中参数化类的类字面语法
  • Kotlin:使用自定义setter时没有lateinit的解决方法?
  • 在超类的初始化中使用variables时,重写variables会创建一个NPE
  • 在更改Kotlin源文件时,使Intellij IDE运行Kotlin / Java注释处理
  • 习惯性的Kotlin正则expression式
  • Kotlin language will be the best programming language for Android.