在Swift中快速查找数组中的min

时间:2015-03-26 09:23:29

标签: arrays swift

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
    }
}

2 个答案:

答案 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;

更令人沮丧的了。