iOS - Objective-c 数组排序的几种方法

2016年会把自己在CSDN上的一些 东西慢慢移动到简书来,都是自己在项目中用到的一些知识点.

数组排序的几种方法

数据源
  NSMutableArray *array1 = [[NSMutableArray alloc ]initWithObjects:  
                      @{@"name":@"a",@"sex":@"22"},  
                      @{@"name":@"b",@"sex":@"32"},  
                      @{@"name":@"c",@"sex":@"25"},  
                      @{@"name":@"d",@"sex":@"45"},  
                      @{@"name":@"e",@"sex":@"56"},  
                      @{@"name":@"j",@"sex":@"23"},  
                      @{@"name":@"f",@"sex":@"67"},  
                      @{@"name":@"h",@"sex":@"23"},  
                      @{@"name":@"h",@"sex":@"234"},  
                      @{@"name":@"h",@"sex":@"2345"},  
                      @{@"name":@"h",@"sex":@"4562"},  
                      @{@"name":@"h",@"sex":@"12312"},  
                      @{@"name":@"h",@"sex":@"324"},  
                      @{@"name":@"h",@"sex":@"3"},  
                      @{@"name":@"h",@"sex":@"1"},  
                      @{@"name":@"h",@"sex":@"67456"},  
                      @{@"name":@"h",@"sex":@"3422"},  
                      @{@"name":@"h",@"sex":@"23344"},  
                      @{@"name":@"h",@"sex":@"3456"},  
                      @{@"name":@"h",@"sex":@"82"},  
                      nil nil];   
1.冒泡排序写俩for循环
  NSDictionary *t;  
    for (int i = 0; i<[array1 count]-1; i++) {  
      for (int j =0; j<[array1 count]-i-1; j++) {  
      NSInteger data1 = [array1[j+1][@"sex"]intValue];  
      NSInteger data2 = [array1[j]  [@"sex"]intValue];  
      if (data1 == MIN(data1, data2)) {  
          t = [array1 objectAtIndex:j+1];  
          //对数组里的数据逆序存放  
          [array1 exchangeObjectAtIndex:j+1 withObjectAtIndex:j];  
          [array1 replaceObjectAtIndex:j withObject:t];  
      }  
      }  
    }  
2.利用 NSSortDescriptor 类
  NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"sex" ascending:YES];  
  [array1 sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];  
注意的地方:

这里YES是代表升序,降序变成NO。有点要说明下,这个类这么写进行排序只是根据第一个数字去排序比如:1,32,123,23 利用他排序后的结果是 , 1,123,23,32字母也是一样。

3.NSComparator
NSComparator cmptr = ^(id obj1, id obj2){  
NSString *t1=obj1[@"sex"];  
NSString *t1=obj2[@"sex"];   
if ([t1 doubleValue]<[t2 doubleValue]) {  
    return (NSComparisonResult)NSOrderedDescending;  
}  
if ([t1 doubleValue]>[t2 doubleValue]) {  
    return (NSComparisonResult)NSOrderedAscending;  
}  
return (NSComparisonResult)NSOrderedSame;  
};  

在要适当的地方,用数组调用:

  [array1 sortUsingComparator:cmptr];  

记录下以后方便使用.

随机获取数组中五个不同的元素

- (NSArray*)getRandomServiceWithList:(NSArray*)array
{
    NSMutableSet *randomSet = [[NSMutableSet alloc] init];
    while ([randomSet count] < 5) {
        int r = arc4random() % [array count];
        [randomSet addObject:[array objectAtIndex:r]];
    }
    return [randomSet allObjects];
}
    原文作者:态度哥
    原文地址: https://www.jianshu.com/p/f791017a6707
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞