Arrays 在Scala函数中接收Int或Double数组

Arrays 在Scala函数中接收Int或Double数组,arrays,scala,function,functional-programming,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数组

我有以下标准化功能:

...
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]
可以被模糊地接收,在函数定义中


你有什么想法吗?

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

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]
,因为对于
Int
s、
Long
s和所有其他整数类型,返回
Array[N]
似乎没有任何意义

例如:

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

您想在这种情况下使用
Int
/
?我想不会吧,
[0,1,3]
会发生什么<代码>最小值=0
最大值=3
(1-0)/(3-0)=1/3
。它不是一个整数。你是想绕着它转,还是想在地板上,还是想在天花板上,还是想做别的事情?整数不是a,因此,
Double
s和
Int
s没有共享好的超类/类型类/接口。这只是预处理算法类部分的函数部分。不要担心不确定的情况,NaN值在算法中处理:)在标题和文本中有两个稍微不同的问题。在标题中,您询问的是“Int或Double数组”(即类似于
数组[Int | Double]
),而在文本中,您询问的是“Double数组或Int数组”(即类似于
数组[Int]|数组[Double]
)。[请注意,这些实际上是Dotty中的合法类型,因此在Scala 3中也可能是这样。]要在Scala中实现这一想法,请参阅以下问题的精彩答案: