Array.filter比循环便宜吗?

Rya*_*yan 1 arrays swift

有一个filter功能Array.我不知道它是不是用平常便宜loop一样for.

如果是这样,为什么?

Ole*_*ann 7

现在,Swift是开源的很酷的事情是我们可以自己验证这一点.下面是电流源代码Sequence.filter(注意,已经使用新的名称SequenceIterator; SequenceType以及GeneratorType将在斯威夫特3重命名):

/// Returns an `Array` containing the elements of `self`,
/// in order, that satisfy the predicate `includeElement`.
@warn_unused_result
public func filter(
  @noescape includeElement: (Iterator.Element) throws -> Bool
) rethrows -> [Iterator.Element] {

  var result = ContiguousArray<Iterator.Element>()

  var iterator = self.makeIterator()

  while let element = iterator.next() {
    if try includeElement(element) {
      result.append(element)
    }
  }

  return Array(result)
}
Run Code Online (Sandbox Code Playgroud)

它使用while循环而不是for循环,可能是因为之前编写的代码for ... in甚至是一个东西(尽管我还没有验证).但是你可以看到它本质上是一个没有特殊优化的简单循环.