let numbers = [1, 6, 3, 9, 4, 6]
let min = minElement(numbers) // 1
let position = find(array, min)!
有没有更好的方法来找到数组中次要元素的位置?循环搜索,在这种情况下最快。
min = Int.max
for (index,value) in enumerate(array){
if value < min{
min = value
position = index
}
}
答案 0 :(得分:6)
如果你喜欢“功能性”的方式:
let array = [6, 3, 1, 9, 4, 6]
let (position, min) = reduce(enumerate(array), (-1, Int.max)) {
$0.1 < $1.1 ? $0 : $1
}
position // -> 2
min // -> 1
但我不知道它比for
循环更快:)
答案 1 :(得分:4)
我认为你应该坚持使用原始代码。它非常易于阅读和理解(对于将来的维护非常重要),您可以让编译器使用内置的优化。
let min = minElement(numbers)
let position = find(array, min)!
正如克里斯·拉特纳(Chris Lattner)今年在WWDC会谈中所做的那样,目标应该是可读性和可理解性,而不是简洁性或冗长性。在决定走哪条路时我想问自己的问题是:
如果我从现在开始一年或两年阅读这段代码,我会立即掌握它是什么 在做什么?
没有什么比看着你自己的代码并且说&#34;嗯???&#34;
更令人沮丧的了。