使用Swift,我想锻炼一个复杂的数组过滤器或排序,但被困住了。我的整数数组可以包含1到7个元素。给定某个不在数组中的整数值(例如X),我想找到在自身和X之间的差最小的数组元素。
在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的版本可以在编辑历史中找到。
对不起,您没有早日回复。实际上,我的元素没有超过7个,但我仍在使用Swift 1.2。如果您可以包括Swift 1.2功能样式的解决方案,我将不胜感激。
@chronos:您只需要最接近的值还是也需要索引?
索引是我需要的主要内容。
@chronos:请参阅更新。请注意,Xcode 7现在是最终版本,因此花太多时间在Swift 1.2代码上也许不值得麻烦。
谢谢,只是更新到Xcode7。这可能与问题不完全相关,但是我已经看过WWDC 2015视频,内容是“ Swift的新功能”,从根本上来说是很划算的。您是否知道有任何资源提供有关Swift 2新功能的深入信息?