【问题标题】:Sorting array of dictionaries based on NSNumber [duplicate]基于NSNumber对字典数组进行排序[重复]
【发布时间】:2014-09-02 02:17:54
【问题描述】:

我有一组字典,其中键为@“id”的 NSNumber。我想根据 @"id" 值对这个数组进行排序。我该怎么做?

【问题讨论】:

    标签: ios arrays sorting nsarray nsdictionary


    【解决方案1】:

    您可以使用 NSSortDescriptor 对字典进行排序。请试试这个:

      // Example array containing three dictionaries with "id" and "name" keys
      NSArray *unsortedArray = @[@{ @"id":@3, @"name":@"abc"}, @{ @"id":@1, @"name":@"123" }, @{ @"id": @2, @"name":@"xyz" }];
      NSLog(@"Unsorted Array === %@", unsortedArray);
    
      NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc]
                                        initWithKey: @"id" ascending: YES];
      NSArray *sortedArray = [unsortedArray sortedArrayUsingDescriptors: [NSArray arrayWithObject:sortDescriptor]];
      NSLog(@"Sorted Array ==== %@", sortedArray);
    

    【讨论】:

      【解决方案2】:

      您可以使用-[NSArray sortedArrayUsingComparator:] 和比较块轻松完成此操作。

      比较块需要返回NSComparisonResult。幸运的是,与键“id”关联的值为NSNumbers,因此只需返回-[NSNumber compare:] 的结果即可。

      // Example array containing three dictionaries with "id" keys
      NSArray *unsortedArray = @[@{ @"id": @3 },  @{ @"id": @1 }, @{ @"id": @2 }];
      
      NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
          return [obj1[@"id"] compare:obj2[@"id"]];
      }];
      

      【讨论】:

        【解决方案3】:

        NSArray 是不可变的,因此要对数组进行排序,您可以将其替换为这样的排序版本:

        NSArray * myArray = SortArray(myArray);
        
        // SortArray works like this.
        
        // Helper function.
        NSInteger MyComparisonFunction(id a, id b, void* context) {
          NSNumber *aNum = (NSNumber*)a[@"id"];
          NSNumber *bNum = (NSNumber*)b[@"id"];
          return [aNum compare:bNum];
        }
        
        NSArray* SortArray (NSArray* unsorted) {
          return [unsorted sortedArrayUsingFunction:MyComparisonFunction context:nil];
        }
        

        另一种方法是使用 NSMutableArray,然后以类似的方式对其进行排序。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2013-07-21
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2021-04-24
          • 1970-01-01
          • 2015-03-16
          相关资源
          最近更新 更多