ios – Swift3中的数组过滤器

我有一段代码.我不知道这段代码里面有什么内容.任何人都可以解释一下吗?
let wordFreqs = [("k",5),("a",7),("b",3)]

        let res = wordFreqs.filter(
        {
            (e) -> Bool in

            if e.1 > 3 {
                return true
            } else {
                return false
            }

        }).map { $0.0 }

        print(res)

提供输出

["k","a"]

解决方法

如果我们一个一个地使用此代码的部分:
let wordFreqs = [("k",3)]

你从一系列元组开始.

从Swift文档:

A tuple type is a comma-separated list of types,enclosed in parentheses.

和:

Tuples group multiple values into a single compound value. The values within a tuple can be of any type.

在这种情况下,元组是2个值的“耦合”,一个是String类型,另一个是Int类型.

let res = wordFreqs.filter(
        {
            (e) -> Bool in

此部分在阵列上应用过滤器.你可以在这里看到过滤器的闭包采用元素e(因此,在我们的例子中,是一个元组),并返回一个Bool.使用’filter’函数,返回true表示保留值,而返回false表示将其过滤掉.

if e.1 > 3 {
                return true
            } else {
                return false
            }

e.1语法返回索引1处元组的值.
因此,如果索引1(第二个)的元组值超过3,则过滤器返回true(因此将保留元组);如果不是,则过滤器返回false(因此从结果中排除元组).
此时,过滤器的结果将是[(“k”,(“a”,7)]

}).map { $0.0 }

map函数基于元组数组创建一个新数组:对于输入数组的每个元素($0),它返回索引0处的元组值.所以新数组是[“k”,“a”]

print(res)

这会将结果打印到控制台.

这些函数(滤波器,映射,缩减等)在函数式编程中非常常见.它们通常使用点语法链接,例如,[1,2,3] .filter({}).map({}).reduce({})

相关文章

UITabBarController 是 iOS 中用于管理和显示选项卡界面的一...
UITableView的重用机制避免了频繁创建和销毁单元格的开销,使...
Objective-C中,类的实例变量(instance variables)和属性(...
从内存管理的角度来看,block可以作为方法的传入参数是因为b...
WKWebView 是 iOS 开发中用于显示网页内容的组件,它是在 iO...
OC中常用的多线程编程技术: 1. NSThread NSThread是Objecti...