能接受函數(shù)作為參數(shù)或者返回值為函數(shù)的函數(shù)幌墓,就是高階函數(shù)
1.map(映射)
//定義一個數(shù)組汰规,用map來遍歷,并且把返回值重新組合成arr
var a = [1,2,3,4,5]
a = a.map{$0*$0}
print("a===\(a)")
//flatMap把二維數(shù)組降低為一維數(shù)組
let b = [[1, 2, 3], [1, 2, 3]]
let c = b.flatMap{$0}
print("c===\(c)")
//compactMap把數(shù)組中的可選值去掉,保留確定值
let arr = [1, 2, 3, Optional(9), nil, 4, 5]
print("arr===\(arr)")
let newArr = arr.compactMap { $0 }
print("newArr===\(newArr)")
a===[1, 4, 9, 16, 25]
c===[1, 2, 3, 1, 2, 3]
arr===[Optional(1), Optional(2), Optional(3), Optional(9), nil, Optional(4), Optional(5)]
newArr===[1, 2, 3, 9, 4, 5]
- reduce
let abc = [1,2,3,4,5]
let abd = abc.reduce(0) { (value1, value2) -> Int in
print("1==\(value1) 2===\(value2)")
return value1 + value2
}
print(abd)
1==0 2===1
1==1 2===2
1==3 2===3
1==6 2===4
1==10 2===5
15
可以看到reduce接受一個參數(shù)0鹅经,并且把閉包里返回的值作為參數(shù)繼續(xù)傳入reduce京景,閉包里value1是reduce接受的第一個參數(shù),value2是數(shù)組的下一個元素多望,當(dāng)元素結(jié)束的時候,整個函數(shù)返回閉包的計算值
- filter 數(shù)組過濾
let strArr = ["張三", "李四", "王五", "趙六"]
let str = strArr.filter { (str) -> Bool in
return str.hasPrefix("張")
}
print(str)
["張三"]
4.sorted數(shù)組排序
let strArr = ["張三", "李四", "王五", "趙六"]
let str = strArr.sorted {
return $0 > $1
}
print(str)
["趙六", "王五", "李四", "張三"]