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({})

相关文章

当我们远离最新的 iOS 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...