获取 CGFloat 最接近的值

kfo*_*rim 2 arrays ios swift swift2 swift3

我很好奇是否有一种方法可以通过现代 api 快速实现最接近的值?

例如:

let x = [1.2, 3.4, 4.5, 6.7, 8.9]
print(x.getClosestValue(3.7) //3.4
Run Code Online (Sandbox Code Playgroud)

我一直在尝试使用map和reduce,但仍然无法解决这个问题。出现的问题是我必须迭代整个数组才能检测误报。在某些情况下,您可以拥有多个最接近的值,所以只是想知道如何快速完成此操作?

Joa*_*son 5

您可以使用min(by:)它来实现这一点,并且不需要排序数组

let x = [1.2, 3.4, 4.5, 6.7, 8.9]
let target = 3.7

let closestTarget = x.min(by: {abs($0 - target) < abs($1 - target)})
Run Code Online (Sandbox Code Playgroud)