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
- Swift之过滤器(filter)
- Swift 4.0 数组(Array)之过滤器(filter)的使用
- Servlet之Filter过滤器
- Servlet之过滤器filter
- javaWeb之过滤器Filter
- 【JavaWeb】之过滤器Filter
- Servlet之过滤器Filter
- Java之Filter过滤器
- Servlet之Filter过滤器
- angularjs之filter过滤器
- springboot之过滤器(filter)
- Servlet之Filter过滤器
- Servlet之过滤器总结--Filter
- Servlet之Filter过滤器1
- MVC之自定义过滤器(Filter)
- Servlet之过滤器Filter详解
- Servlet之过滤器Filter详解
- Java-Servlet之过滤器Filter
- 路径和文字
- U-Boot移植——Nand Flash
- iOS swift学习之入门详解(枚举和结构)
- Wsdl文件读取方式
- 第10,11周 阅读程序写出运行结果 (2)
- Swift之过滤器(filter)
- 不良资产证券化是什么意思
- 树操作(上)
- PHP自定义多进制
- JEECG开源团队,欢迎技术爱好者加入
- iOS swift学习之入门详解(协议和扩展)
- Cocoapods的简单安装、使用与更新版本
- 未看
- 红黑树RB_tree