Swift中.map()、.filter()等高阶函数是否保持集合顺序?
Swift中.map()、.filter()、.reduce()的顺序保证问题
对于Swift里的Array这类有序集合,.map()、.filter()、.reduce()这三个高阶函数都会严格保持输入集合的原有元素顺序,不会出现乱序情况。
具体说明:
.map():会按原数组的元素顺序依次执行转换操作,结果数组的元素位置和原数组完全一一对应。比如你给出的例子:
let arrayOfIntegers: [Int] = [1, 2, 3, 4, 5] let mappedArray = arrayOfIntegers.map { $0 * 2 }执行后
mappedArray必然是[2, 4, 6, 8, 10],绝对不会出现[2, 6, 10, 4, 8]这类乱序结果。.filter():过滤后保留的元素会完全遵循它们在原数组中的相对顺序。比如对原数组过滤偶数,结果会是
[2, 4],不会变成[4, 2]。.reduce():虽然最终返回单个聚合值,但它会按原数组的元素顺序从左到右遍历累积,计算过程的顺序是固定的,不会打乱原数组的元素处理顺序。
注意:如果是Set这类无序集合,调用这些函数的结果顺序就没有保证,但你的例子里用的是Array,完全不用担心乱序问题。
内容的提问来源于stack exchange,提问作者Burak Akyalçın
相关产品推荐
相关产品推荐

