1:声明另一个数组filterNumbers
let filterNumbers = [1, 2, 3, 4, 5]
let filteredNumbers = filterNumbers.filter { $0 > 3 }
print(filteredNumbers) //prints [4, 5]
在这个例子中,我们过滤filteredNumbers,只保留大于3的项目。此示例还使用Swift的各种语法改进来确保我们的代码简洁。
2:我们试试看forEach一个数组叫做forEachNumbers:
let forEachNumbers = [1, 2, 3, 4, 5]
forEachNumbers.forEach { print($0) } //prints one item of the array on each line
使用forEach非常类似于使用for循环。再次,我们使用了许多语法改进来确保我们有干净的代码。
3:现在,让我们reduce试试看看reduceNumbers:
let reduceNumbers = [1, 2, 3, 4 ,5]
let reducedNumber = reduceNumbers.reduce(0) { $0 + $1 }
print(reducedNumber) //prints 15
reduce用于将集合减少为单个值。在我们的例子中,我们将所有数字加在一起reduceNumbers,并将其存入reducedNumber。
4:flatMap
再去一次!让我们用flatMap现在。声明一个数组flatMapNumbers。这一次,我们的起始数组与前面的例子有点不同,它包含nil值:
let flatMapNumbers = [1, nil, 2, nil, 3, nil, 4, nil, 5]
let flatMappedNumbers = flatMapNumbers.flatMap { $0 }
print(flatMappedNumbers) //prints [1, 2, 3, 4, 5]
flatMap遍历一个集合,使用输入关闭来操纵值。生成的集合只包含非零值。您会注意到,最终的数组不包含nil元素。flatMap对于从集合中删除可选值特别有用。
您可以链接更高阶的函数来创建强大的转换,这在一个变换中是不可能的。以下是一个例子:
let chainNumbers = [1, nil, 2, nil, 3, nil, 4, nil, 5]
let doubledNumbersOver8 = chainNumbers.flatMap { $0 }.filter { $0 > 3 }.map { $0 * 2 }
print(doubledNumbersOver8) //prints [8, 10]