将阈值应用于数组中的所有值

时间:2019-03-19 19:49:30

标签: arrays swift

我有一个由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)
  }
}

但是我想知道是否有一些更神奇的方法使用这些神奇的命令,例如滤镜,地图,平面地图等。

2 个答案:

答案 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})