我认为这一定是一个基本的数学运算,但我真的想不通。我需要根据给定数组中的值获取 0 到 1 之间的值数组。因此,例如,如果我们有一个初始数组 [24, 128, 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) }
results
是:[0, 1, 0.2692307692307692]
您指定了您想要
[0, 1, 0.5]
,但我认为这是错误的,因为您说“其余部分应按比例在它们之间”。输入 [24.0, 128.0, 76.0]
将输出 [0, 1, 0.5]
。注意: 源数组不能是
[Int]
否则 map 操作会将结果四舍五入为 1 或 0。如果您需要使用 [Int]
,则必须转换 map
操作中的每个元素。关于ios - 分布数组值,最大值为 1,最小值为 0,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32169111/