我有以下函数返回数组的规范化版本,其元素可以是Int,Double,Float。
我收到下面第5行所示的错误。我认为Numeric协议会解决二进制操作,但我猜不是。我做错了什么?
L = {0,1}*1{0,1}^n
感谢
答案 0 :(得分:1)
Numeric
协议需要加法,减法和乘法运算符,
但不是分部操作员。
我不知道一个协议需要一个整数和浮点类型都符合的除法运算符,因此你必须这样做 实现两个重载函数:
func normalizeArray<T: FloatingPoint>(a: [T]) -> [T] { ... }
func normalizeArray<T: BinaryInteger>(a: [T]) -> [T] { ... }
请注意,如果调用为空,则实现将崩溃 数组,我建议
func normalizeArray<T: BinaryInteger>(a: [T]) -> [T] {
guard let min = a.min(), let max = a.max() else {
return []
}
return a.map({ ($0 - min) / (max - min) })
}