Swift的过滤方法是否稳定?

时间:2015-04-03 22:03:49

标签: arrays swift

当我在Swift中过滤数组时,我可以期望结果与原始数据的顺序相同吗?例如,我可以指望:

[3, 1, 4, 1, 5, 9, 2, 7].filter{$0 > 4}

总是回来:

[5, 9, 7]

2 个答案:

答案 0 :(得分:10)

是的,你可以指望它。 Array的filter实例方法调用全局filter方法,其在Swift头文件中的注释明确说明:

  

返回Array,其中包含<{1}},按顺序的元素,以满足谓词

(我的斜体)。

此外,这些方法在sourcemap(以及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]

数组操作方法倾向于在有意义的时候保持整个板的顺序,并且它在这里做。如果以相同的顺序返回,我会非常惊讶。但是再一次,因为没有明确提到,以断言的形式写一个支票可能是一个好主意,以防它们改变它。