Objective-c sort array int方法

    技术2022-07-04  131

    (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


    最新回复(0)