如数组和字典
forEach(_:)
实例方法中所述:
以与for-in循环相同的顺序在 序列 中的每个元素上调用给定的闭包。
尽管如此,改编自序列概述:
序列是您可以一次浏览一个值的列表。遍历序列元素 的最常见方法 是使用 for-in循环 。
forEach(_:)
或表示该迭代序列for in
:
let closedRange = 1...3
for element in closedRange { print(element) } // 1 2 3
closedRange.forEach { print($0) } // 1 2 3
或(数组):
let array = [1, 2, 3]
for element in array { print(element) } // 1 2 3
array.forEach { print($0) } // 1 2 3
将给出相同的输出。
为什么forEach(_:)
还要存在?即使用它而不是for in
循环有什么好处?从性能角度来看,它们是相同的吗?
作为一个假设,它可能是语法糖,特别是在使用 函数式编程时 。
没有提供任何性能上的好处forEach
。实际上,如果您查看源代码,该forEach
函数实际上只是执行for
-
in
。对于发行版,此功能相对于简单使用的性能开销for
- in
自己并不重要,尽管对于调试版,这会导致明显的性能影响。
的主要优势forEach
时,你正在做的函数式编程实现,你可以把它添加到的功能调用链,而无需事先结果保存到一个单独的变量,如果你使用你需要for
-
in
语法。因此,代替:
let objects = array.map { ... }
.filter { ... }
for object in objects {
...
}
您可以改为使用功能性编程模式:
array.map { ... }
.filter { ... }
.forEach { ... }
结果是功能代码更简洁,语法噪音更少。
FWIW,Array,Dictionary和Sequence的文档都使我们想起了引入的限制forEach
,即:
您不能使用
break
或continue
语句退出body
关闭的当前调用或跳过后续调用。
return
在body
闭包中使用该语句将仅从当前对的调用退出body
,而不从任何外部范围退出,并且不会跳过后续调用。
问题内容: Android有自己的HashMap实现,它不使用自动装箱,并且在某种程度上可以提高性能(CPU或RAM)? https://developer.android.com/reference/android/support/v4/util/ArrayMap.html 从我在这里所读的内容中,如果我的HashMaps的大小低于数百条记录并且将被频繁写入,则应将我的HashMap对象替换为A
问题内容: 代替在所有地方使用是否合法?为什么从Python 3中删除?似乎是一种了不起的,有用的方法。它背后的原因是什么? 编辑: 为澄清起见,我想知道以类似于生成器的方式(一次将一项,而不是全部都存储到内存中)以与Python 2和Python 3兼容的方式遍历字典的正确习惯是什么。 ? 问题答案: 在Python 2.x中-返回(键,值)对的列表。在Python 3.x中,现在是一个对象,其
问题内容: 有人可以为我阐明使用MySQLi代替MySQL的优点和缺点吗?在某些情况下我不应该使用MySQLi?为了使用MySQLi,是否需要对服务器进行其他配置?例如,是否需要升级Apache或PHP以支持MySQLi? 问题答案: 为什么应使用MySQLi扩展而不是MySQL扩展的原因很多: MySQLi为您提供准备好的语句-一种将数据发送到MySQL并保护您免受SQL注入的安全方法。 仅此一
问题内容: 似乎PHP有两个名为memcache和memcached的 memcached库。有什么区别,您怎么知道要使用哪一个?是一个过时了吗?看来memcached提供了更多的方法,所以我认为这意味着它已经有了最多的开发-但它似乎也需要外部C / C ++库,因此我不确定是否可以安装它。 似乎memcache已经存在了很长时间,不需要其他库,甚至为Windows 预编译了二进制文件!我认为这将
问题内容: 什么时候用Java thread.run()代替thread.start()? 问题答案: 你可能要在特定于功能而不是并发的特定单元测试中调用run()。
问题内容: 奇怪的是: 似乎或多或少被定义为。通过这种方式很容易产生错误: 一些fname意外地以else块结尾。修复很简单,我们应该改用它,但是从表面上看,这似乎是一种不错的pythonic方式,并且比“正确”的方式更具可读性。 由于字符串是不可变的,所以为什么字符串错误是什么技术细节?什么时候进行身份检查更好,什么时候进行平等检查更好? 问题答案: 据我所知,检查对象身份是否相等。由于没有强制