2011-08-09 82 views
36

Vì vậy, đây là câu hỏi khá cơ bản về cách tốt nhất để sắp xếp một đối tượng tùy chỉnh NSMutableArray.Sắp xếp NSMutableArray theo thuộc tính của đối tượng

Tôi có một NSMutableArray đối tượng tùy chỉnh, mỗi đối tượng có NSStringNSDate đi cùng nhau. Tôi cần sắp xếp mảng bằng đối tượng mới nhất (vì vậy mới nhất NSDate), và tôi khá chắc chắn rằng tôi có thể sử dụng NSDate compare: NSDate nếu đây là một mảng chỉ NSDate, nhưng vì tôi cần tất cả các đối tượng được sắp xếp chứ không chỉ ngày , Tôi không chắc liệu tôi có thể sử dụng phương pháp đó hay không.

Xét về mã giả, tôi cần: Nhìn vào đối tượng riêng lẻ, xác định xem đối tượng hiện tại là NSDate là lớn nhất tiếp theo trong mảng hay không, và nếu có, di chuyển đối tượng, không chỉ ngày tháng. Một lần nữa, đây là điều mà tôi thậm chí còn do dự khi hỏi vì nó rất cơ bản nhưng tôi không muốn viết một số phương pháp kém hiệu quả nếu có một phương pháp lớp trước tồn tại về cơ bản sẽ làm những gì tôi muốn, tìm kiếm một mảng các thuộc tính con của đối tượng và sắp xếp các đối tượng theo các phần tử con.

Cảm ơn bạn đã được trợ giúp.

Trả lời

79

NSSortDescriptors s làm điều này thực sự đơn giản. Với NSMutableArray bạn có thể sắp xếp các mảng hiện có sử dụng sortUsingDescriptors: và với mảng bất biến bạn tạo một mảng mới sử dụng sortedArrayUsingDescriptors:

//This will sort by stringProperty ascending, then dateProperty ascending 
[mutable_array sortUsingDescriptors: 
@[ 
    [NSSortDescriptor sortDescriptorWithKey:@"stringProperty" ascending:YES], 
    [NSSortDescriptor sortDescriptorWithKey:@"dateProperty" ascending:YES] 
    ]]; 
+0

Cảm ơn, đó có vẻ là chỉ là những gì Tôi đang tìm kiếm! –

+0

Có vẻ như tôi cũng nên nghiên cứu thêm một chút, câu hỏi này chính xác là vấn đề của tôi cũng như cho bất kỳ ai trong tương lai: http://stackoverflow.com/questions/6083408/sort-nsarray-of-custom-objects-by -their-nsdate-properties –

+0

Cảm ơn bạn rất nhiều! Điều đó đã làm phép thuật cho tôi :) –

17

đoạn nhỏ này làm việc rất lớn đối với tôi:

[students sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]]; 
Các vấn đề liên quan