arrays - Array.filter 比循环便宜吗?

标签 arrays swift

Array 中有一个filter 函数。我想知道它比使用像 for 这样的普通 loop 更便宜。

如果是,为什么?

最佳答案

现在 Swift 是开源的,很酷的一点是我们可以自己验证这一点。 Here's the current source code for Sequence.filter (请注意,它已经使用了新名称 SequenceIteratorSequenceTypeGeneratorType 将在 Swift 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)
}

它使用 while 循环而不是 for 循环,可能是因为该代码是在 for ... in 甚至是 a 之前编写的事情(虽然我还没有证实)。但你可以看到,它本质上是一个简单的循环,没有进行特殊优化。

关于arrays - Array.filter 比循环便宜吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36339138/

相关文章:

c - 如何关联一组可变长度变量?

c++ - 0 长度数组(或 std::array)有什么用?

swift - 检查 Hashable 一致性

swift - NSURL 错误 - 文件不存在

swift - NSCollectionViewItems 在更新数据并调用 NSCollectionView.reloadData() 后呈现不正确

swift - Alamofire 请求丢失 "Content-length"

c - 如何从最终输出密文中删除空格?

arrays - 定义 XSD,使 XML 元素的类型为 ="array"

java - 添加稍后在 arraylist 或 array 中使用循环初始化的变量

ios - MFMessageComposeViewControllerDelegate 未被调用