Swift之过滤器(filter)

来源:互联网 发布:wpf编程书籍 编辑:程序博客网 时间:2024/06/05 20:27
Swift提供了很多方便的函数来操作数组,比如 filter,map,reduce,flatMap 等.今天我们了解一下 filter ,顾名思义就是用来过滤的,这是Swift为每个数组提供的一个新式武器,filter用于选择数组元素中满足某种条件的元素。

假设有一个数组,接着想要创建一个新的数组,新数组包含原数组中所有大于20的元素,我们可以使用下面的for循环:
let array = Array(5...25)var anotherArray = [Int]()for i in array{    if i > 20{       anotherArray.append(i)    }}print(anotherArray) //[21, 22, 23, 24, 25]
上面已经实现功能了,但是我们可以使用更简单的方式,那就是filter函数,可以大大缩减相关的代码量,如下:
let secondArray = array.filter { (i: Int) -> Bool in    return i > 20  //注意:根据需求在闭包内进行相应的操作。}print(secondArray) //[21, 22, 23, 24, 25]
代码对比之前还是简单了一些:该函数带一个闭包做为参数,这个闭包将数组中的元素作为参数,并返回一个bool结果。数组中的每一个元素都会执行该闭包,根据返回的结果来决定是否应存在于新的数组中。

通过Swift提供的闭包简化写法,我们可以进一步精简:
let thirdArray = array.filter ({$0 > 20})print(thirdArray) // [21, 22, 23, 24, 25]

接下来看filter对数组中字典过滤的例子。需求是:过滤出包含需要的字符部分!
var people = [    ["First": "JohnMusk", "Last": "Doe"],    ["First": "Steve", "Last": "Jobs"],    ["First": "Elon", "Last": "Musk"]]var searchText = "Musk"var searchResults = people.filter{       var firstName = $0["First"]!.lowercaseString    var lastName = $0["Last"]!.lowercaseString       return firstName.rangeOfString(searchText.lowercaseString) != nil        || lastName.rangeOfString(searchText.lowercaseString) != nil   }print(searchResults)//[["First": "JohnMusk", "Last": "Doe"], ["First": "Elon", "Last": "Musk"]]

对于上面过滤部分,我们也可以进行如下:
let searchResult = people.filter{       var found = false    let searText = "Musk"    for str in $0.values {        found = str.lowercaseString.rangeOfString(searText.lowercaseString) != nil        if found {            break        }    }    return found}print(searchResult)//[["First": "JohnMusk", "Last": "Doe"], ["First": "Elon", "Last": "Musk"]]
当然,我们也可以使用谓词进行过滤操作
let firstNameQuery = "jo"let lastNameQuery = "mus"let predicate = NSPredicate(format: "%K CONTAINS[cd] %@ OR %K CONTAINS[cd] %@", "First", firstNameQuery, "Last", lastNameQuery)let sorted = people.filter({    return predicate.evaluateWithObject($0)})print(sorted)//[["First": "JohnMusk", "Last": "Doe"], ["First": "Elon", "Last": "Musk"]]


0 0
原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 红米note4x跳屏怎么办 红米开机键坏了怎么办 红米note2开关键不灵敏怎么办 大学生论文检测系统忘记密码怎么办 快手实验室没有k歌怎么办 皮肤一到冬天就会起皮脱落怎么办 嘴上的皮撕破了怎么办 身体皮肤干燥起皮怎么办 把公司数据库弄宕机了怎么办 地铁上临时变站怎么办 大学实践课挂了怎么办 军训的人长得矮怎么办 军训脸被晒黑了怎么办 晚上吃了油炸的怎么办 楼梯又陡又窄怎么办 小孩不认真做作业怎么办 水厂出水水质不达标怎么办 野猪铁夹子夹到怎么办 燃气灶开孔尺寸大了怎么办 苹果电脑视频显示缺少插件怎么办 安装拼多多显示校验失败怎么办 中央庭黑盒被抢怎么办 lab值a值偏高怎么办 橱房管道堵死了怎么办 微信被别的手机同步登录怎么办 计算机机房空调坏了怎么办 被蝎子蛰了怎么办怎么处理? 月嫂走了孩子闹怎么办 转业军人自建房有困难怎么办 转业军人没配偶想异地安置怎么办 转业军人档案和身份证不符怎么办 转业军人个人资被单位遗失怎么办 空军飞行学员停飞后怎么办 2020年不脱贫的农户怎么办 马自达8停产后配件怎么办 钢铁雄心3没将领怎么办 江苏低于二本线怎么办 电工证快过期了怎么办 天正建筑打不开高版本的图纸怎么办 打开天正只显示cad怎么办 天正软件显示过期了怎么办