我有一个由1000个元素组成的数组,这些元素在0到1之间波动。
我要扫描该数组,并将低于某个阈值(例如0.3
)的所有值归零。
我知道我可以做类似的事情
let filteredArrayOnDict = myArray.filter { $0 > 0.3}
,我将得到一个包含0.3
以上元素的新数组。但这不是我想要的。我想将元素低于0.3归零,并保持结果数组中元素的数量相同。
我可以像这样遍历数组
var newArray : [Double] = []
for item in myArray {
if item > 0.3 {
newArray.append(item)
} else {
newArray.append(0)
}
}
但是我想知道是否有一些更神奇的方法使用这些神奇的命令,例如滤镜,地图,平面地图等。
答案 0 :(得分:5)
Accelerate framework为此具有专用功能vDSP_vthresD
:
零填充矢量阈值;双精度。
示例:
import Accelerate
let array = [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6]
var threshold = 0.3
var result = Array(repeating: 0.0, count: array.count)
vDSP_vthresD(array, 1, &threshold, &result, 1, vDSP_Length(array.count))
print(result) // [0.0, 0.0, 0.0, 0.3, 0.4, 0.5, 0.6]
答案 1 :(得分:4)
您可以为此尝试地图
var resultArray = myArray.map({$0 > 0.3 ? $0 : 0})