Swift高阶函数常用到的有:map、flatMap、compactMap、filter、reduce、sorted、forEach
map
map可以理解为转换,可以对集合中的每个元素做处理,看例子:
let nums = [1,2,3]
let nums1 = nums.map({String($0)})
let nums2 = nums.map({$0*5})
print(nums1,nums2)//控制台打印["1", "2", "3"] [5, 10, 15]
flatMap&compactMap
flatMap官方解释:In fact, s.flatMap(transform) is equivalent to Array(s.map(transform).joined())
说白了就两点降阶
与去空
,当集合中含有nil时,不具有降阶效果,但是集合本身若是一阶不会再降阶,只具有去空效果,且会报警告: flatMap is deprecated: Please use compactMap(_:) for the case where closure returns an optional value,不含nil时才有降阶效果
compactMap官方解释:Use this method to receive an array of non-optional values when your transformation produces an optional value
说白了就是集合中含有nil时,具有去空效果
下面我们看几个例子,就能理解了
let nonNullArray = [[1,2,3], [4,5], [6, 7, 8, 9]]
let nonNullFlatMapArray = nonNullArray.flatMap {$0}
print(nonNullFlatMapArray)//控制台打印[1, 2, 3, 4, 5, 6, 7, 8, 9]
let nonNullCompactMapArr = nonNullArray.compactMap{$0}
print(nonNullCompactMapArr)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]
let hadNullArray = [[1,2,3], [4,5], [6, 7, 8, 9],nil]
let hadNullFlatMapArray = hadNullArray.flatMap {$0}
print(hadNullFlatMapArray)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]
let hadNullCompactMapArr = hadNullArray.compactMap{$0}
print(hadNullCompactMapArr)//控制台打印[[1, 2, 3], [4, 5], [6, 7, 8, 9]]
let charArray = ["1","2","3","A","B"]
let charFlatMapArray = charArray.flatMap { temChar -> Int? in
return Int(temChar)
}
print(charFlatMapArray)//控制台打印[1,2,3]
let charCompactMapArray = charArray.compactMap { temChar -> Int? in
return Int(temChar)
}
print(charCompactMapArray)//控制台打印[1,2,3]
filter
filter可以理解为筛选,闭包里即是自定义条件
let orgNums = [1,3,5,7,9]
let filterNums = orgNums.filter({$0>3})
print(filterNums)//控制台打印[5,7,9]
reduce
reduce可以理解为累计,reduce有两个函数reduce(_:_:)
与reduce(into:_:)
,两个的效果都是一样的,只是使用不同,第一个参数都为初始值
let totalNums = [1,2,3,4]
let totalReduceNum1 = totalNums.reduce(into: 0) { partialResult, num in
partialResult += num
}
print(totalReduceNum1)//控制台打印10
let totalReduceNu2 = totalNums.reduce(0) { num1, num2 in
num1 + num2
}
print(totalReduceNu2)//控制台打印10
sorted
sorted说白了就是对集合指定规则排序
let sortedNums = [1,5,9,4,2]
let sortedResultNums = sortedNums.sorted { num1, num2 in
num1 < num2
}
print(sortedResultNums)//控制台打印[1,2,4,5,9]
forEach
forEach即是对集合每个元素做处理,且并没有返回值
let eachNums = [1,2,3]
var eachNewStrNums:[String] = []
eachNums.forEach({eachNewStrNums.append("\($0)")})
print(eachNewStrNums)//控制台打印["1", "2", "3"]
网友评论