关于NSArray 排序的问题

来源:互联网 发布:91取名软件 编辑:程序博客网 时间:2024/05/21 21:50

第一种,利用数组的sortedArrayUsingComparator调用 NSComparator ,obj1和obj2指的数组中的对象

NSComparator cmptr = ^(id obj1, id obj2){   if ([obj1 integerValue] > [obj2 integerValue]) {          return (NSComparisonResult)NSOrderedDescending;      }      if ([obj1 integerValue] < [obj2 integerValue]) {          return (NSComparisonResult)NSOrderedAscending;      }      return (NSComparisonResult)NSOrderedSame;  };  NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];   //排序前   NSMutableString *outputBefore = [[NSMutableString alloc] init];   for(NSString *str in sortArray){    [outputBefore appendFormat:@"];   }   NSLog(@"排序前:%@",outputBefore);   [outputBefore release];   //第一种排序   NSArray *array = [sortArray sortedArrayUsingComparator:cmptr];   NSMutableString *outputAfter = [[NSMutableString alloc] init];   for(NSString *str in array){    [outputAfter appendFormat:@"];   }   NSLog(@"排序后:%@",outputAfter);   [outputAfter release];

第二种 排序方法 利用sortedArrayUsingFunction 调用 对应方法customSort,这个方法中的obj1和obj2分别是指数组中的对象

NSInteger customSort(id obj1, id obj2,void* context){   if ([obj1 integerValue] > [obj2 integerValue]) {          return (NSComparisonResult)NSOrderedDescending;      }      if ([obj1 integerValue] < [obj2 integerValue]) {          return (NSComparisonResult)NSOrderedAscending;      }      return (NSComparisonResult)NSOrderedSame;  }   NSArray *sortArray = [[NSArray alloc] initWithObjects:@"1",@"3",@"4",@"7",@"8",@"2",@"6",@"5",@"13",@"15",@"12",@"20",@"28",@"",nil];   //排序前   NSMutableString *outputBefore = [[NSMutableString alloc] init];   for(NSString *str in sortArray){    [outputBefore appendFormat:@"];   }   NSLog(@"排序前:%@",outputBefore);   [outputBefore release];   NSArray *array = [sortArray sortedArrayUsingFunction:customSort context:nil];   NSMutableString *outputAfter = [[NSMutableString alloc] init];   for(NSString *str in array){    [outputAfter appendFormat:@"];   }   NSLog(@"排序后:%@",outputAfter);   [outputAfter release];  

第三种 利用sortUsingDescriptors调用NSSortDescriptor

NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:NO];//其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];    [_totalInfoArray sortUsingDescriptors:sortDescriptors];    [_airListView refreshTable:_totalInfoArray];    [sortDescriptor release];    [sortDescriptors release];

第四种 block 排序

直接上代码:
 NSArray    *array = [NSArray arrayWithObjects:@"71", @"16", @"51", @"104", @"13",@"2",@"1", nil];      array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {          return (arc4random() % 3) - 1;      }];     // NSLog(@"array:%@", array);      NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {           if ([obj1 integerValue] > [obj2 integerValue]) {               return (NSComparisonResult)NSOrderedAscending;           }           if ([obj1 integerValue] < [obj2 integerValue]) {               return (NSComparisonResult)NSOrderedDescending;           }           return (NSComparisonResult)NSOrderedSame;       }];   sortedArray 是排好序的时间对象数组      // 按时间排序      NSArray *sortedArray = [srcArrary sortedArrayUsingComparator:^(id obj1, id obj2)                              {                                  NSComparisonResult result = [obj1 compare:obj2];                                  switch(result)                                  {                                      case NSOrderedAscending:                                          return NSOrderedDescending;                                                  case NSOrderedDescending:                                          return NSOrderedAscending;                                      case NSOrderedSame:                                          return NSOrderedSame;                                      default:                                          return NSOrderedSame;                                    } // 时间从近到远(远近相对当前时间而言)                              }];  
NSArray    *array = [NSArray arrayWithObjects:@"1", @"2", @"3", @"4", @"5", nil];      array = [array sortedArrayUsingComparator:(NSComparator)^(id obj1, id obj2) {          return (arc4random() % 3) - 1;      }];      NSLog(@"array:%@", array);
0 0
原创粉丝点击