【问题标题】:Sorting Array in increasing order按升序对数组进行排序
【发布时间】:2011-04-13 13:13:48
【问题描述】:

我有一个包含 0、3、2、8 等值的数组。我想按升序对数组进行排序。请告诉我该怎么做。

提前致谢!!

【问题讨论】:

    标签: iphone objective-c sorting nsarray


    【解决方案1】:

    如果你的数组是一个包含 NSNumber 的 NSArray:

    NSArray *numbers = [NSArray arrayWithObjects:
                        [NSNumber numberWithInt:0],
                        [NSNumber numberWithInt:3],
                        [NSNumber numberWithInt:2],
                        [NSNumber numberWithInt:8],
                        nil];
    
    NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
    NSArray *sortedNumbers = [numbers sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
    

    但请记住,这只是对 NSArray 进行排序的一种方法。

    仅举几个 NSArray 的其他方法:


    如果你的数组是一个包含整数的 c int 数组:

    #include <stdio.h>
    #include <stdlib.h>
    int array[] = { 0, 3, 2, 8 };
    int sort(const void *x, const void *y) {
        return (*(int*)x - *(int*)y);
    }
    void main() {
        qsort(array, 10, sizeof(int), sort);
    }
    

    【讨论】:

      【解决方案2】:

      如果你的数组很简单,只需要NSNumbers,你就不需要排序描述符。如果叫array,那么

      [array sortedArrayUsingSelector:@selector(compare:)];
      

      将根据需要返回一个按升序排序的新数组。

      【讨论】:

        【解决方案3】:
        NSSortDescriptor *sortDescriptor;
        sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:nil
                                                      ascending:YES] autorelease];
        NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
        NSArray *sortedArray;
        sortedArray = [**YourArray** sortedArrayUsingDescriptors:sortDescriptors];
        

        【讨论】:

          【解决方案4】:

          排序有许多解决方案,每个解决方案的效率不同。

          在我看来,最简单、最自然的排序是插入排序。转到此页面并向下滚动以查看代码。 Insertion sort

          有关所有排序算法的更完整列表,check this page

          【讨论】:

            【解决方案5】:

            使用代码:[[myData allKeys]sortedArrayUsingSelector:@selector(psuedoNumericCompare:)];

            myData 是您的数组。如果您在代码中使用该行,它将按整数的大小排序(而不是按字母排序,因此它不会像 1, 111, 2,322, 333, 4445, 45, 67 那样排序,而是像 1, 2, 45, 67, 111, 322, 333, 4445 那样排序)。

            原文来源:How to let the sortedArrayUsingSelector using integer to sort instead of String?

            【讨论】:

            • psuedoNumericCompare 不是 NSString 上的方法,你必须自己添加它。
            【解决方案6】:

            您可以使用sortUsingSelector的代码以简单的方法对数组进行排序,如下所示。

            [array sortUsingSelector:@selector(compare:options:)];
            NSLog(@"array after sort in max:%@",array);
            

            我认为这是不使用任何描述符的最简单方法。

            【讨论】:

              【解决方案7】:

              试试这个。如果你有像 {1,10.11,12,2,23} 这样的数组 intArr

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

              【讨论】:

                猜你喜欢
                • 1970-01-01
                • 1970-01-01
                • 2016-02-01
                • 2012-04-13
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                • 1970-01-01
                相关资源
                最近更新 更多