接收Int或Double in Scala函数的数组

时间:2018-09-02 16:18:00

标签: arrays scala function functional-programming

我具有以下归一化功能:

...
private def NormalizeValues(dataValues: Array [Double]): Array[Double] = {
val min = dataValues.min
val max = dataValues.max
dataValues.map(v => (v - min) / (max - min))
}
...

我希望它能够工作,无论它接收Double数组还是Int数组。我认为,与其将Int数组转换为Double数组,不如说有更好的方法,也许可以使用更通用的类型,或者指定Array[Doubles]Array[Int]可以被隐隐接收功能定义。

你有什么主意吗?

1 个答案:

答案 0 :(得分:3)

这里是将所有输入转换为Double,然后完全按照原始代码进行操作的版本:

def normalize[N: math.Numeric](data: Array[N]): Array[Double] = {
  val num = implicitly[Numeric[N]]
  val dataValues = data.map(num.toDouble)
  val min = dataValues.min
  val max = dataValues.max
  dataValues.map(v => (v - min) / (max - min))
}

返回类型始终为Array[Double],因为对于Array[N]Int和所有其他整数类型返回Long似乎没有任何意义

一个例子:

normalize(Array[Int](0, 1, 3))
// returns: Array[Double]
// Array(0.0, 0.3333333333333333, 1.0)