Ios 分配数组值,使最大值为1,最小值为0

Ios 分配数组值,使最大值为1,最小值为0,ios,arrays,swift,Ios,Arrays,Swift,我想这一定是一个基本的数学运算,但我真的搞不懂。我需要根据给定数组中的值获取一个介于0和1之间的值数组。例如,如果我们有一个初始数组[24128,52],那么结果数组应该是[0,1,0.5]。最大值和最小值应始终分别为1和0,其余值应按比例介于两者之间 如何在Swift中执行此操作?从数组开始: let sourceArray = [24.0, 128.0, 52.0] 存储最小和最大元素: let min = minElement(sourceArray) // 24.0 let max =

我想这一定是一个基本的数学运算,但我真的搞不懂。我需要根据给定数组中的值获取一个介于0和1之间的值数组。例如,如果我们有一个初始数组
[24128,52]
,那么结果数组应该是
[0,1,0.5]
。最大值和最小值应始终分别为1和0,其余值应按比例介于两者之间

如何在Swift中执行此操作?

从数组开始:

let sourceArray = [24.0, 128.0, 52.0]
存储最小和最大元素:

let min = minElement(sourceArray) // 24.0
let max = maxElement(sourceArray) // 128.0
规范化每个元素并将结果映射到新数组:

let results = sourceArray.map { ($0 - min) / (max - min) }
结果
是:

[0, 1, 0.2692307692307692]
您指定需要
[0,1,0.5]
,但我认为这是错误的,因为您说过“其余部分应按比例介于两者之间”。输入
[24.0,128.0,76.0]
将输出
[0,1,0.5]

注意:源数组不能是
[Int]
,否则映射操作会将结果取整为1或0。如果需要使用
[Int]
操作,则必须转换
映射操作中的每个元素。

在Swift 5中使用:

let min = sourceArray.min()
let max = sourceArray.max()
// will produce optionals! Unwrap them if you are sure they won't be nil
let results = sourceArray.map { ($0 - min!) / (max! - min!) }
let数组:[Double]=[24128,52]
array.map{[range=ClosedRange(包围:数组)!]in
范围。正常化($0)!
}
公共扩展关闭窗口{
///一个范围,其边界是给定序列的极值。
///
///-返回:`nil`如果序列为空。
初始?(包含边界:边界)
其中Bounds.Element==Bound{
guard let initialRange=(bounds.first.map{$0…$0})
else{return nil}
self=bounds.dropFirst().reduce(到:initialRange){range,绑定到
如果绑定range.upperBound{
范围=范围。下限…绑定
}
}
}
}
公共扩展关闭范围的绑定位置:AdditiveArithmetic{
///”“上界-下界`
var大小:绑定{upperBound-lowerBound}
}
公共扩展ClosedRange的绑定位置:FloatingPoint{
///单位为该范围的“量值”的值,
///它的起源是“lowerBound”。
///
///-注意:未夹持在0和1之间。
///
///-返回:`nil`当范围的大小为零时。
func normalize(uu-bound:bound)->bound{
try?(界-下限)÷量级
}
中缀运算符÷:乘法优先
公共扩展浮点数{
///-抛出:`DivisionByZeroError`
静态函数÷(分子:Self,分母:Self)抛出->Self{
保护分母!=0
else{throw divisionbyzerorerror(分子:分子)}
返回分子/分母
}
}
公共扩展序列{
///序列的第一个元素。
///-注意:`nil`如果序列为空。
变量优先:元素{
var iterator=makeIterator()
返回iterator.next()
}
}
//实际上在'Numeric'中找不到除法,
//但它似乎确实存在于所有继承自它的重要协议中。
公共结构DivisionByZeroError:错误{
公共let分子:分子
公共初始化(分子:分子){
self.momerator=分子
}
}

非常感谢。请给未来的读者一个提示。如果您使用的是Swift 2.0,则需要使用sourceArray.minElement()而不是minElement(sourceArray)。如果min和max的值相同,则会崩溃。