(1)直接调用系统的方法排序int
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[NSNumber numberWithInt:20]];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:4]];
NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(compare:)];
for(int i = 0; i < [sortedArray count]; i++)
{
int x = [[sortedArray objectAtIndex:i]intValue];
NSLog(@"######%d/n", x);
}
(2)用descriptor方法
#import <Cocoa/Cocoa.h>
@interface Node: NSObject {
int x;
int y;
int v;
}
@property int x;
@property int y;
@property int v;
- (id)init:(int)tx y:(int)ty v:(int)tv;
@end
@implementation Node
@synthesize x;
@synthesize y;
@synthesize v;
- (id)init:(int)tx y:(int)ty v:(int)tv {
x = tx;
y = ty;
v = tv;
return self;
}
@end
int main(int argc, char *argv[])
{
NSMutableArray *myMutableArray = [[NSMutableArray alloc]init];
Node *n[2];
n[0] = [[Node alloc]init:2 y:1 v:1];
n[1] = [[Node alloc]init:4 y:2 v:2];
[myMutableArray addObject:n[0]];
[myMutableArray addObject:n[1]];
NSSortDescriptor * sortByA = [NSSortDescriptor sortDescriptorWithKey:@"x" ascending:NO];
[myMutableArray sortUsingDescriptors:[NSArray arrayWithObject:sortByA]];
for(Node *t in myMutableArray) {
NSLog(@"x === %d", t.x);
NSLog(@"y === %d", t.y);
NSLog(@"v === %d", t.v);
}
}
(3)自定义重写方法
/*
Abstract: Constants returned by comparison functions, indicating whether a value is equal to, less than, or greater than another value.
Declaration: enum CFComparisonResult {
kCFCompareLessThan = -1,
kCFCompareEqualTo = 0,
kCFCompareGreaterThan = 1
};
*/
#import <Cocoa/Cocoa.h>
@implementation NSNumber (MySort)
- (NSComparisonResult) myCompare:(NSString *)other {
//这里可以作适当的修正后再比较
int result = ([self intValue]>>1) - ([other intValue]>>1);
//这里可以控制排序的顺序和逆序
return result < 0 ? NSOrderedDescending : result > 0 ? NSOrderedAscending : NSOrderedSame;
}
@end
int main(int argc, char *argv[])
{
NSMutableArray *array = [[NSMutableArray alloc]init];
[array addObject:[NSNumber numberWithInt:20]];
[array addObject:[NSNumber numberWithInt:1]];
[array addObject:[NSNumber numberWithInt:4]];
NSArray *sortedArray = [array sortedArrayUsingSelector:@selector(myCompare:)];
for(int i = 0; i < [sortedArray count]; i++)
{
int x = [[sortedArray objectAtIndex:i]intValue];
NSLog(@"######%d/n", x);
}
}
注:
关于 sortedArrayUsingSelector:@selector(copare:)是默认的排序方法,而你自己可以重写排序方法,比如上面的myCompare