购买
下载掌阅APP,畅读海量书库
立即打开
畅读海量书库
扫码下载掌阅APP

3.2 Filter

map 函数并不是Swift标准数组库中唯一一个使用泛型的函数。在后面的内容中会介绍其他几个。

假设我们有一个由字符串组成的数组,代表文件夹的内容:

现在如果我们想要一个包含所有 .swift 文件的数组,则可以很容易通过简单的循环得到:

现在可以使用这个函数来取得 exampleFiles 数组中的Swift文件:

当然,我们可以将 getSwiftFiles 函数一般化。比如,相比于使用硬编码(hardcoding)的方式筛选扩展名为 .swift 的文件,传递一个附加的 String 参数进行比对会是更好的方法。我们接下来可以使用同样的函数去比对 .swift .md 文件。但是假如我们想查找没有扩展名的所有文件,或者是名字以字符串 "Hello" 开头的文件,那该怎么办呢?

为了进行一个这样的查找,我们可以定义一个名为 filter 的通用型函数。就像之前看到的 map 那样, filter 函数接受一个 函数 作为参数。 filter 函数的类型是 Element-> Bool 。对于数组中的所有元素,此函数都会判定它是否应该被包含在结果中:

根据 filter 能很容易地定义 getSwiftFiles

就像 map 一样,Swift标准库中的数组类型已经有定义好的 filter 函数了。所以除非是作为练习,否则并没有必要重写它。

现在你可能会问:有没有更通用的函数, 可以用来定义 map 可以用来定义 filter ?关于这个问题,我们会在本章的最后解答。 vLzLZzsdEZ+7Hq8QGL3dmY41m2fscaPe3wJN5wj0ksL7nuszlJRuqO0piuwuovcB

点击中间区域
呼出菜单
上一章
目录
下一章
×