2015-04-03 14 views
5

Khi tôi lọc một mảng trong Swift, tôi có thể mong đợi các kết quả theo thứ tự giống như bản gốc không? Ví dụ, tôi có thể đếm trên:Phương pháp lọc của Swift có ổn định không?

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

luôn trở về:

[5, 9, 7] 

?

+0

Có. Nó sẽ trở lại như cũ. – anasimtiaz

+0

Giả sử không. Bạn mong đợi điều gì khác được trả về bởi '$ 0> 4'? –

+0

@LeoNatan, nó có thể trả về '[9, 5, 7]'. Tôi hỏi câu hỏi bởi vì mã của tôi cần nó để luôn luôn trả về '[5, 9, 7]' và tôi không biết có nên viết séc cho điều đó hay không. – user3770280

Trả lời

8

Có, bạn có thể tin tưởng vào nó. Phương pháp filter thể hiện của mảng gọi filter phương pháp toàn cầu, mà bình luận trong file header Swift rõ ràng nói:

Return một Array chứa các yếu tố của source, để, đáp ứng các vị

(chữ nghiêng của tôi).

Hơn nữa, toàn bộ điểm của những phương pháp trên mảng như mapfilter (và, cho rằng vấn đề, reduce) là một mảng là ra lệnh và họ chu kỳ thông qua các mảng theo thứ tự mà. Một mảng là một chuỗi (một SequenceType): nó có một máy phát điện với một phương pháp next() đó được gọi là nhiều lần để chu kỳ thông qua các mảng để, và next() phương pháp này cách phương pháp như vậy làm chu kỳ thông qua mảng.

3

Trong khi nó không được đề cập một cách rõ ràng, dường như đó là trường hợp theo quy định của 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] 

Mảng thao tác phương pháp có xu hướng duy trì trật tự trên bảng bất cứ khi nào nó làm cho tinh thần, và nó ở đây. Tôi sẽ rất ngạc nhiên nếu nó đã làm không phải quay lại theo cùng một thứ tự. Nhưng một lần nữa kể từ khi nó không được đề cập một cách rõ ràng, nó có thể là một ý tưởng tốt để viết một kiểm tra trong các hình thức của một khẳng định trong trường hợp họ thay đổi nó xuống dòng.

Các vấn đề liên quan