2012-10-16 9 views
21

thể trùng lặp:
How to sort an NSMutableArray with custom objects in it?Sắp xếp mảng các đối tượng sở hữu bởi NSDate họ

như thế nào một loại một mảng của các đối tượng bằng cách truy cập các thuộc tính NSDate của họ?

Tôi biết một người có thể sử dụng [mutableArray sortUsingSelector:@selector(compare:)]; trên một loạt ngày, nhưng làm cách nào để thực hiện điều này bằng cách truy cập thuộc tính NSDate trên mỗi phần tử trong mảng, sắp xếp các đối tượng theo ngày sớm nhất đến ngày mới nhất?

Trả lời

31

Cảm ơn tất cả các câu trả lời, tôi đã xem qua câu trả lời này đã giải quyết được vấn đề của tôi. Check NSGod's answer

Đây là mã nhờ sử dụng: NSGod:

NSSortDescriptor *dateDescriptor = [NSSortDescriptor 
           sortDescriptorWithKey:@"startDateTime" 
              ascending:YES]; 
NSArray *sortDescriptors = [NSArray arrayWithObject:dateDescriptor]; 
NSArray *sortedEventArray = [nodeEventArray 
    sortedArrayUsingDescriptors:sortDescriptors]; 
0

Bạn có thể ghi đè phương thức so sánh trong lớp tùy chỉnh để so sánh hai đối tượng trong lớp tùy chỉnh của bạn và trả về NSComparisonResult phù hợp theo ngày trên đối tượng.

Ví dụ:

-(NSComparisonResult)compare:(YourClass*)otherObject 
{ 
    return [self.date compare:otherObject.date]; 
} 
8

Bạn có thể sử dụng:

NSArray *sortedArray = [mutableArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) { 
     NSDate *first = [(Person*)a birthDate]; 
     NSDate *second = [(Person*)b birthDate]; 
     return [first compare:second]; 
    }]; 

Hoặc thấy điều này link

12
NSSortDescriptor* sortByDate = [NSSortDescriptor sortDescriptorWithKey:@"nsdatepropertyname" ascending:YES]; 
    [mutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByDate]]; 
+2

Để làm cho nó hơi ngắn gọn hơn, bạn có thể viết dòng thứ hai như thế này: '[mutableArray sortUsingDescriptors: @ [sortByDate]];' –

+2

Để làm rõ thêm một chút (nếu cần), 'sortUsingDescriptors:' trả về 'NSArray' đã sắp xếp. Có thể bạn sẽ muốn gán nó cho một biến khác và lấy nó từ đó như được thực hiện trên [câu trả lời của Helium3] (http://stackoverflow.com/a/12913805/2192331). –

0

Có một phương pháp gọi là -[NSArray sortedArrayUsingComparator:]. Phải mất một khối trong đó bạn có thể thực hiện bất kỳ so sánh bạn thấy phù hợp cho các đối tượng của bạn.