2010-05-06 61 views
8

Vì vậy, tôi có một lớp tùy chỉnh Foo rằng có một số thành viên:Sorting một mảng của Objective-c đối tượng

@interface Foo : NSObject { 
    NSString *title; 
    BOOL  taken; 
    NSDate *dateCreated; 
} 

Và trong lớp khác Tôi có một NSMutableArray chứa danh sách các đối tượng này. Tôi rất muốn sắp xếp mảng này dựa trên tài sản dateCreated; Tôi hiểu tôi có thể viết sorter của riêng tôi cho điều này (iterate mảng và sắp xếp lại dựa trên ngày) nhưng tôi đã tự hỏi nếu có một cách thích hợp Objective-C để đạt được điều này?

Một số loại cơ chế sắp xếp nơi tôi có thể cung cấp biến thành viên để sắp xếp theo sẽ là tuyệt vời.

Trong C++ tôi đã sử dụng quá tải các toán tử < => và điều này cho phép tôi sắp xếp theo đối tượng, nhưng tôi có cảm giác buồn cười Objective-C có thể cung cấp một lựa chọn tốt hơn?

Rất cám ơn

+0

Trong C++, bạn chỉ cần quá tải '<'. –

+1

Hãy xem câu hỏi này: http://stackoverflow.com/questions/805547/how-to-sort-an-nsmutablearray-with-custom-objects-in-it – schaechtele

Trả lời

15

Điều đó khá đơn giản.

Thứ nhất, trong đối tượng Foo của bạn, tạo ra một phương pháp

- (NSComparisonResult) compareWithAnotherFoo:(Foo*) anotherFoo; 

nào sẽ trở lại

[[self dateCreated] compare:[anotherFoo dateCreated]]; 

Cuối cùng, kêu gọi các mảng

[yourArray sortUsingSelector:@selector(compareWithAnotherFoo:)]; 

Hope this helps, Paul

+0

Giải pháp ngắn gọn, mặc dù tôi phải thay đổi 'compareWithDate' để' so sánh'. – davbryn

+0

@Pawel Điều này làm việc tốt nhưng với các ký tự như å ä ö việc phân loại là một chút tắt. (å và ä xuất hiện sau a và ö sau o). Bạn không xảy ra để biết làm thế nào để giải quyết điều này? – Groot

+0

@Filip thứ tự bạn đã mô tả có vẻ ổn khi å và ä chỉ là các phiên bản của chữ cái có dấu phụ được thêm vào. Chính xác hành vi bạn mong đợi là gì? – Pawel

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