數組內部對象排序(sort),數組對象排序sort

來源:互聯網
上載者:User

數組內部對象排序(sort),數組對象排序sort

1.數組排序有很多方法比如for,while迴圈去進行冒泡排序或者快速看、排序等多種排序方法

 而我在這裡要說的是蘋果API提供的幾個系統方法

  a.迭代器     Descriptor

  b.方法比較  Selector

  c.函數比較  Function

  d.塊代碼    Block自訂

2.樣本

  1.1一個要比較對象的類(Person)

123456789 @interface Person : NSObject @property(nonatomic copy)NSString * name; @property(nonatomic copy)NSString * phone; @property(nonatomic , assign)int age; @end

 1.2自訂幾個Person對象(在其他類中)

1234567891011121314151617 Person *person1 = [[Person alloc] init];person1.name = @"gulong";person1.age = 23; Person *person2 = [[Person alloc] init];person2.name = @"guzheng";person2.age = 24; Person *person3 = [[Person alloc] init];person3.name = @"zhangsan";person3.age = 21; Person *person4 = [[Person alloc] init];person4.name = @"lisi";person4.age = 25; NSArray *originalArray = @[person1,person2,person3,person4];

 1.3排序開始

    1.3.1 使用迭代器進行排序

        使用NSSortDescriptor可以很方便的進行多條件排序

123 NSSortDescriptor *sorter1 = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];NSSortDescriptor *sorter2 = [[NSSortDescriptor alloc] initWithKey:@"age" ascending:NO];NSArray *modifyArray1 = [originalArray sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sorter1,sorter2,nil]];

       //首先通過name的字母進行升序排序,然後進行age大小比較進行降序排序

      //數組通過sortedArrayUsingDescriptors可以進行多重排序(就是相等時就進行下一個比較迭代器)

    1.3.2 使用SEL方法排序

       首先需要在對象類裡面定義並且在實作類別裡面實現這一方法(OC方法),該方法返回一個NSComparisonResult的枚舉值(其實就是-1,0,1),然後NSArray調用sortedArrayUsingSelector這個方法時內部會進行相應的比較排序

1 Person.h<br>- (NSComparisonResult)compareAgeAscende:(id)other;
12345678910111213 Person.m<br>- (NSComparisonResult)compareAgeAscende:(id)other{    Person *otherPerson = (Person *)other;    if (self.age > otherPerson.age) {        return NSOrderedDescending;    }else{        if (self.age == otherPerson.age) {            return NSOrderedSame;        }else{            return NSOrderedAscending;        }    }}

          下面是調用 sortedArrayUsingSelector

123 ViewController  (- (void)viewDidLoad)  NSArray *modifyArray2 = [originalArray sortedArrayUsingSelector:@selector(compareAgeAscende:)];  NSLog(@"modifyArray2 : %@",modifyArray2);

      注: a.當數組裡面對象是NSString時可以用compare:進行sel比較

     1.3.3 函數比較  該函數是一個比較函數(C語言),該函數同樣是放回NSComparisonResult這個枚舉,其實就是一個NSInteger的整數,然後NSArray調用sortedArrayUsingFunction這個方法時內部會進行相應的比較排序    

123456 // 定義在viewController裡面(其實定義在哪裡無所謂,主要是可以調用到就行)NSInteger personSort(id obj1,id obj2 ,void * context){    Person *person1 = (Person *)obj1;    Person *person2 = (Person *)obj2;    return [person1.name localizedCompare:person2.name];}

 

12 NSArray *modifyArray3 = [originalArray sortedArrayUsingFunction:personSort context:NULL];    NSLog(@"modifyArray3 : %@",modifyArray3);

     1.3.4 block比較 該block裡面定義寫一個比較的代碼塊,該代碼塊同樣返回NSComparisonResult這個枚舉

123456789101112 NSArray *modifyArray4 = [originalArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        Person *pers1 = (Person *)obj1;        Person *pers2 = (Person *)obj2;        if (pers1.age > pers2.age) {            return NSOrderedDescending;        }else if (pers1.age < pers2.age){            return NSOrderedAscending;        }else{            return NSOrderedSame;        }    }];    NSLog(@"modifyArray4 : %@",modifyArray4);

   1.4 字串(帶漢字)轉拼音字串 (為了上面的比較問題,為了更多需求)

123456 - (NSString *) phonetic:(NSString*)sourceString {    NSMutableString *source = [sourceString mutableCopy];    CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformMandarinLatin, NO);    CFStringTransform((__bridge CFMutableStringRef)source, NULL, kCFStringTransformStripDiacritics, NO);    return source;}<br>  //漢字轉拼音後會以空格隔開

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.