当前位置:  开发笔记 > IOS > 正文

Swift3中的数组过滤器

如何解决《Swift3中的数组过滤器》经验,为你挑选了2个好方法。

我有一段代码.我不知道这段代码里面有什么内容.任何人都可以解释一下吗?

 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"]

Frédéric Add.. 11

如果我们一个接一个地使用这段代码:

let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]

你从一系列元组开始.

从Swift文档:

元组类型是以逗号分隔的类型列表,括在括号中.

和:

元组将多个值分组为单个复合值.元组中的值可以是任何类型.

在这种情况下,元组是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", 5), ("a", 7)]


        }).map { $0.0 }

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


        print(res)

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


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



1> Frédéric Add..:

如果我们一个接一个地使用这段代码:

let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]

你从一系列元组开始.

从Swift文档:

元组类型是以逗号分隔的类型列表,括在括号中.

和:

元组将多个值分组为单个复合值.元组中的值可以是任何类型.

在这种情况下,元组是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", 5), ("a", 7)]


        }).map { $0.0 }

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


        print(res)

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


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



2> Fogmeister..:
// this creates an array of tuples
let wordFreqs = [("k", 5), ("a", 7), ("b", 3)]

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

    // this filters the array
    // it removes any items that have the second part of the tuple
    // of 3 or less
    if e.1 > 3 {
        return true
    } else {
        return false
    }
}.map {
    // this "maps" the array and returns the first part of the tuple
    $0.0
}

print(res)

注意......如果我写这篇文章,我会把它缩短为......

let res = wordFreqs.filter { $0.1 > 3 }
                   .map { $0.0 }

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有