Warm tip: This article is reproduced from serverfault.com, please click

swift-如何查找/过滤具有最小正差的数组元素

(swift - how to find/filter the array element with the smallest positive difference)

发布于 2015-09-14 15:19:59

使用Swift,我想锻炼一个复杂的数组过滤器或排序,但被困住了。我的整数数组可以包含1到7个元素。给定某个不在数组中的整数值(例如X),我想找到在自身和X之间的差最小的数组元素。

Questioner
chronos
Viewed
0
Martin R 2017-07-27 02:27:25

Swift 2中,你可以使用函数式编程将其作为“单一代码”来完成:

let numbers = [ 1, 3, 7, 11]
let x = 6

let closest = numbers.enumerate().minElement( { abs($0.1 - x) < abs($1.1 - x)} )!

print(closest.element) // 7 = the closest element
print(closest.index)   // 2 = index of the closest element

enumerate()遍历所有数组元素以及相应的索引,并minElement()返回(index, element)相对于闭包的“最小” 对。闭包将两个元素之差的绝对值与进行比较x

(这里假定该数组不为空,因此minElement() 不返回nil。)

请注意,这可能不是大型数组的最快解决方案,因为(几乎)所有数组元素的绝对差都计算了两次。但是对于小阵列,这应该没关系。

迅捷3

let numbers = [ 1, 3, 7, 11]
let x = 6
let closest = numbers.enumerated().min( by: { abs($0.1 - x) < abs($1.1 - x) } )!
print(closest.element) // 7
print(closest.offset) // 2

雨燕1.2的版本可以在编辑历史中找到。