一、字符串
- subString与String
- subString是一个全新的类型,看类名像是String的子类,但是大家千万别被误导了,Substring并不是String的子类,这是两个不同的类型,但是它们都继承了StringProtocol协议,因此存在一些共性;在开发中Substring并不常用(一般会在分割String中见到),所以往往要转成String。
- subString最重要的作用的体现是在性能上,自身在分割时,其实重用了父String的内存,延长了父String的生命周期,当这个subString不被释放,其父String也不被释放。
- 字符串分割
我们可以使用两种方式对字符串进行分割,分别为split以及components方法,两种方法在类型以及分割结果上有着不同结果;
- split
分割后的结果为[Substring]类型, - components
分割结果为[String]类型 - 结果比对
import Foundation
let x = ".1.2.3.4.5.."
print("使用split对字符串分割忽略空值结果:\(x.split(separator: "."))")
print("使用split对字符串分割不忽略空值结果:\(x.split(separator: ".",omittingEmptySubsequences:false))")
print("使用components对字符串进行分割结果:\(x.components(separatedBy: "."))")
//结果
使用split对字符串分割忽略空值结果:["1", "2", "3", "4", "5"]
使用split对字符串分割不忽略空值结果:["", "1", "2", "3", "4", "5", "", ""]
使用components对字符串进行分割结果:["", "1", "2", "3", "4", "5", "", ""]
//我们可以直接利用String()函数将subString类型转成String
二、Map、filter、reduce、flatMap以及compactMap的使用
- Map
map方法用于对数据中的每一个元素进行处理,然后返回一个新数组,新数组可以是旧数组中的部分属性组成的;
let str = [12,13,14,15,16,17]
let str1 = str.map{"\($0)" + "元"} //$0表示数组中每一个元素
print(str1)
//结果
["12元", "13元", "14元", "15元", "16元", "17元"]
- filter
filter函数用于将列表中元素进行过滤,筛选出数组中满足某种文件的元素组成新数组;
let str = [12,13,14,15,16,17]
let str2 = str.filter{$0 < 13 || $0 > 15} //$0表示数组中每一个元素
print(str2)
//结果
[12, 16, 17]
- reduce
reduce函数用于将数组元素组合计算为一个计算值,并且接受一个初始值,这个初始值的类型可以与数组元素的类型不同;
let str = [12,13,14,15,16,17]
let str3 = str.reduce(20){$0 + $1} //$0表示累积器,$1表示数组中每个元素
print(str3)
//结果
107
- flatMap
flatMap函数与map函数作用类似,不同点在于它返回的数组中不含有nil(会自动将nil剔除),同时将Optional解包,并且它可以将多维数组拆分变成一维数组,但map不可以。该语法已经在Swift4.1中弃用了,不提供代码示例,代码示例见 5. compactMap - compactMap
swift4.1语法中,使用compactMap函数替代flatMap函数;
//自动去除nil以及解包
let array = ["Apple", "Orange", "Grape", ""]
let arr1 = array.map{ a ->Int?in
let length = a.count
guard length > 0 else{return nil}
return length
}
let arr2 = array.compactMap{ a ->Int?in
let length = a.count
guard length > 0 else{return nil}
return length
}
print(arr1)
print(arr2)
//结果
[Optional(5), Optional(6), Optional(5), nil]
[5, 6, 5]
//多维数组
let array1 = [[1,2,3],[7,8,9],[4,5,6]]
let arr11 = array1.map{ $0 }
let arr22 = array1.flatMap{ $0 }
print(arr11)
print(arr22)
//结果
[[1, 2, 3], [7, 8, 9], [4, 5, 6]]
[1, 2, 3, 7, 8, 9, 4, 5, 6]
三、List数组处理
- sort函数
Swift中自带sort函数,可为数组、字典等进行排序。(Swift4.1以后为sorted),代码示例如下:
//数组字典排序
let nameList = [
["name":"李二","code":"0002","sort":"2"],
["name":"李一","code":"0001","sort":"1"],
["name":"李三","code":"0003","sort":"3"],
]
//正序
let sortList = nameList.sorted{ (list1,list2) ->Bool in //普通写法
return list1["sort"]! < list2["sort"]!
}
//倒序
let sortList1 = nameList.sorted{$0["sort"]! > $1["sort"]! } //稍高级写法,其实就是将两个闭包返回参数用$0以及$1代替了,下面两种写法也可以
// let sortList2 = nameList.sorted(){$0["sort"]! > $1["sort"]! }
// let sortList2 = nameList.sorted(by:{$0["sort"]! > $1["sort"]! })
print(sortList)
print(sortList1)
//正序结果
[["sort": "1", "name": "李一", "code": "0001"], ["sort": "2", "name": "李二", "code": "0002"], ["sort": "3", "name": "李三", "code": "0003"]]
//倒序结果
[["sort": "3", "name": "李三", "code": "0003"], ["sort": "2", "name": "李二", "code": "0002"], ["sort": "1", "name": "李一", "code": "0001"]]
字符串排序以及字典排序与上面方法类似,其中字符串排序可更加省略闭包参数,如 let sortStr = str.sort(<)
,字典排序用0以及1代替key以及value,如根据key值排序代码, let result = dic.sort {$0.0 < $1.0}
。
网友评论