【问题标题】:How to sort NSMutableArray in objective C [closed]如何在目标 C 中对 NSMutableArray 进行排序 [关闭]
【发布时间】:2012-08-08 12:15:03
【问题描述】:

我正在开发计时器应用程序。 我有一个数组。我想按升序对数组进行排序。 假设我在数组中有 5 个元素,例如 10,100,50,30,70。

我想要像 10,30,50,70,100 这样的数组。

【问题讨论】:

  • NSStringNSNUmber的元素
  • 请发布您到目前为止所尝试的内容。没有上下文就很难提供帮助。
  • 标题不应该是“How to sort NSMutableArray in objective c”而是“How to search in Stackoverflow?”

标签: iphone ios


【解决方案1】:
NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) {
    return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch];
}];

编辑: 如果元素是数字,则更改返回的类型以及 firstObject 和 secondObject 的类型。

【讨论】:

    【解决方案2】:

    来自apple's documentation

    NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
    
        if ([obj1 integerValue] > [obj2 integerValue]) {
            return (NSComparisonResult)NSOrderedDescending;
        }
    
        if ([obj1 integerValue] < [obj2 integerValue]) {
            return (NSComparisonResult)NSOrderedAscending;
        }
        return (NSComparisonResult)NSOrderedSame;
    }];
    

    【讨论】:

    • 如果是 NSNumbers,你应该使用 NSNumber 的比较方法。
    • 虽然他并没有说他们是 NSNumbers...
    • 所以你仍然可以调用compare:,因为它是NSObject 方法
    【解决方案3】:

    使用sortedArrayUsingComparator

    NSArray *arr = @[@3, @2, @6, @1];
    NSArray *sorted = [arr sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        if ([obj1 intValue] < [obj2 intValue]) return NSOrderedAscending;
        else return NSOrderedDescending;
    }];
    

    【讨论】:

    • 如果它们的值相同呢?
    • 它没有缺点思考例如1 1, 1, 3和1, 1, 3有什么区别?
    • @[@3, @2, @6, @1, @1, @1, @1];试试吧,它会产生正确的结果。
    【解决方案4】:
     NSArray * arr=[[NSArray alloc]initWithObjects:[NSNumber   numberWithInt:10],[NSNumber   numberWithInt:100],[NSNumber   numberWithInt:50],[NSNumber   numberWithInt:30],[NSNumber   numberWithInt:70], nil];
        NSLog(@"Before sorting%@",arr);
    
        arr = [arr sortedArrayUsingSelector:@selector(compare:)];
          NSLog(@"After sorting%@",arr);
    

    【讨论】:

      【解决方案5】:
      NSSortDescriptor *aSortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"sort" ascending:YES comparator:^(id obj1, id obj2) {
      
          if ([obj1 integerValue] > [obj2 integerValue]) {
              return (NSComparisonResult)NSOrderedDescending;
          }
          if ([obj1 integerValue] < [obj2 integerValue]) {
              return (NSComparisonResult)NSOrderedAscending;
          }
          return (NSComparisonResult)NSOrderedSame;
      }];
      self.myList = [NSMutableArray arrayWithArray:[unsortedList sortedArrayUsingDescriptors:[NSArray arrayWithObject:aSortDescriptor]]];
      

      【讨论】:

      • 无需创建NSSortDescriptor,您可以使用sortedArrayUsingComparator: 方法与相同的块。
      【解决方案6】:

      使用此代码:

      NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(id firstObject, id secondObject) {
          return [((NSString *)firstObject) compare:((NSString *)secondObject) options:NSNumericSearch];
      }];
      

      编辑:如果元素是数字,则更改返回的类型以及 firstObject 和 secondObject 的类型。

      【讨论】:

        猜你喜欢
        • 2016-05-17
        • 1970-01-01
        • 1970-01-01
        • 2011-09-01
        • 2021-05-14
        • 2010-12-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多