標籤:年齡 自訂 sorted 可變 string sort using ring atom
// Person.h#import <Foundation/Foundation.h>@interface Person : NSObject@property (nonatomic, assign) int age;@end
// Person.m#import "Person.h"@implementation Person- (NSString *)description{ return [NSString stringWithFormat:@"age = %i", _age];}@end
//// main.m// NSArray排序#import <Foundation/Foundation.h>#import "Person.h"int main(int argc, const char * argv[]) { NSArray *arr1 = @[@10, @20, @5, @7, @15]; //oc中的數字,@5是oc的對象, NSLog(@"排序前: %@", arr1);//(10,20,5,7,15) // 注意: 想使用compare方法對數組中的元素進行排序, 那麼數組中的元素必須是Foundation架構中的對象(oc對象), 也就是說不能是自訂對象 NSArray *newArr1 = [arr1 sortedArrayUsingSelector:@selector(compare:)]; //NSArray是不可變的,所以要用新的數組接收。 NSLog(@"排序後: %@", newArr1);//(5,7,10,15,20) Person *p1 = [Person new]; p1.age = 10; Person *p2 = [Person new]; p2.age = 20; Person *p3 = [Person new]; p3.age = 5; Person *p4 = [Person new]; p4.age = 7; NSArray *arr = @[p1, p2, p3, p4]; NSLog(@"排序前: %@", arr);//("age = 10","age = 20","age = 5","age = 7") // 按照人的年齡進行排序 // 不能使用compare:方法對自訂對象進行排序 //NSArray *newArr11 = [arr sortedArrayUsingSelector:@selector(compare:)]; // 該方法預設會按照升序排序,NSSortStable表示是安全的,涉及多線程, NSArray *newArr = [arr sortedArrayWithOptions:NSSortStable usingComparator:^NSComparisonResult(Person *obj1, Person *obj2) { // 每次調用該block都會取出數組中的兩個元素給我們,二分演算法, NSLog(@"obj1 = %@, obj2 = %@", obj1, obj2); //排序演算法 return obj1.age > obj2.age;// return obj1.age < obj2.age; /* if (obj1.age > obj2.age) { // 5 4 return NSOrderedDescending; }else if(obj1.age < obj2.age) { // 4 5 return NSOrderedAscending; }else { return NSOrderedSame; } */ }]; NSLog(@"排序後: %@", newArr);// ("age = 5","age = 7","age = 10","age = 20") return 0;}
oc72--NSArray排序