2014-09-02 76 views

回答

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); 
0

的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,然後進行排序,在一個類似的方式。

1

您可以使用-[NSArray sortedArrayUsingComparator:]和比較塊輕鬆完成此操作。

比較塊需要返回NSComparisonResult。幸運的是,與關鍵「id」相關聯的值是NSNumber s,因此只需返回-[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"]]; 
}];