当我在Swift中过滤数组时,我可以期望结果与原始数据的顺序相同吗?例如,我可以指望:
[3, 1, 4, 1, 5, 9, 2, 7].filter{$0 > 4}
总是回来:
[5, 9, 7]
答案 0 :(得分:10)
是的,你可以指望它。 Array的filter
实例方法调用全局filter
方法,其在Swift头文件中的注释明确说明:
返回
Array
,其中包含<{1}},按顺序的元素,以满足谓词
(我的斜体)。
此外,这些方法在source
和map
(以及filter
)等数组上的重点是数组有序并按顺序循环遍历数组 。一个数组是一个序列(一个SequenceType):它有一个带有reduce
方法的生成器,它被重复调用,以按顺序遍历数组,,这个next()
方法是这些方法做循环数组的方式。
答案 1 :(得分:3)
虽然没有明确提及,但根据examples in the documentation
似乎就是这种情况let array = [0, 1, 2, 3, 4, 5, 6, 7]
let filteredArray = array.filter { $0 % 2 == 0 }
// filteredArray is [0, 2, 4, 6]
数组操作方法倾向于在有意义的时候保持整个板的顺序,并且它在这里做。如果不以相同的顺序返回,我会非常惊讶。但是再一次,因为没有明确提到,以断言的形式写一个支票可能是一个好主意,以防它们改变它。