zoukankan      html  css  js  c++  java
  • NSArray 数组排序

    1. //方法1,使用自带的比较器

    2. //compare是数组自带的比较方法

    3. NSArray *array=[NSArray arrayWithObjects:@"3",@"1",@"2", nil];

    4. NSArray *array2= [array sortedArrayUsingSelector:@selector(compare:)];

    5. NSLog(@"%@",array2);

    结果是升序排列

    1. //方式二:使用块完成排

    2. NSArray *array = [NSArray arrayWithObjects:@"1bc",@"4b6",@"123",@"789",@"3ef", nil];

    3. NSArray *sortedArray = [array sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {

    4.            

    5. //这里的代码可以参照上面compare:默认的排序方法,也可以把自定义的方法写在这里,给对象排序

    6.    NSComparisonResult result = [obj1 compare:obj2];

    7.    return result;

    8. }];

    9. NSLog(@"排序后:%@",sortedArray);

    方法3:自定义排序

    1. #import <Foundation/Foundation.h>

    2. @interface Person : NSObject

    3. @property NSString* name;

    4. @property int age;

    5. -(id)initWithNameAndAge:(NSString*) aName and:(int) aAge;

    6. -(NSComparisonResult)comparePersonByAge:(Person *)person;

    7. -(NSComparisonResult)comparePersonByName:(Person *)person;

    8. @end

    1. #import "Person.h"

    2. @implementation Person

    3. @synthesize name,age;

    4. -(id)initWithNameAndAge:(NSString*) aName and:(int) aAge{

    5.    if (self=[super init]) {

    6.        

    7.        name=aName;

    8.        age=aAge;

    9.        

    10.    }

    11.    return self;

    12. }

    13. //自定义排序方法

    14. -(NSComparisonResult)comparePersonByAge:(Person *)person{

    15.    //默认按年龄排序

    16.    NSComparisonResult result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];//注意:基本数据类型要进行数据转换

    17.    //如果年龄一样,就按照名字排序

    18.    //if (result == NSOrderedSame) {

    19.    //    result = [self.name compare:person.name];

    20.    //}

    21.    return result;

    22. }

    23. -(NSComparisonResult)comparePersonByName:(Person *)person{

    24.    //默认按年龄排序

    25.    NSComparisonResult result = [ person.name compare:self.name];//注意:基本数据类型要进行数据转换

    26.    //如果年龄一样,就按照名字排序

    27.    if (result == NSOrderedSame) {

    28.        result = [[NSNumber numberWithInt:person.age] compare:[NSNumber numberWithInt:self.age]];

    29.    }

    30.    return result;

    31. }

    32. - (NSString *)description

    33. {

    34.    return [NSString stringWithFormat:@"%@    %d", name,age];

    35. }

    36. @end

    1. #import <Foundation/Foundation.h>

    2. #import "Person.h"

    3. int main(int argc, const char * argv[]) {

    4.    @autoreleasepool {

    5.        Person *p1 = [[Person alloc]initWithNameAndAge:@" qweasadsasd" and:25];

    6.        Person *p2 = [[Person alloc]initWithNameAndAge:@" 1234" and:28];

    7.        Person *p3 = [[Person alloc]initWithNameAndAge:@"123" and:2];

    8.        Person *p4 = [[Person alloc]initWithNameAndAge:@"zxc" and:89];

    9.        Person *p5 = [[Person alloc]initWithNameAndAge:@"123" and:8];

    10.        

    11.        NSArray * persons = [NSArray arrayWithObjects:p1,p2,p3,p4,p5,nil];

    12.        NSArray *sortedArray = [persons sortedArrayUsingSelector:@selector(comparePersonByName:)];

    13.        NSLog(@"排序后:%@",sortedArray);

    14.    }

    15.    return 0;

    16. }

    方法四:高级排序

  • 相关阅读:
    CodeCraft-19 and Codeforces Round #537 (Div. 2) B. Average Superhero Gang Power
    CodeCraft-19 and Codeforces Round #537 (Div. 2) A
    牛客寒假算法基础集训营1 C. 小a与星际探索
    牛客寒假算法基础集训营5 J 炫酷数学
    牛客寒假算法基础集训营5 A 炫酷双截棍
    pat 1136 A Delayed Palindrome
    pta 1140 Look-and-say Sequence (20 分)
    pta 1150 Travelling Salesman Problem (25 分)(模拟)
    2020年团体程序设计天梯赛 L3-1 那就别担心了
    2020年团体程序设计天梯赛 L2-4 网红点打卡攻略
  • 原文地址:https://www.cnblogs.com/kluan/p/4819403.html
Copyright © 2011-2022 走看看