2013-11-01 82 views
1

假設我想按「firstName」鍵對數組進行排序。如何對包含NSDictionaries的數組進行排序

Array = (
    { 
    People1 = { 
     firstName = @"Jack Adam"; 
     email = @"[email protected]"; 
    }; 
    Address = { 
     cityCode = @"TH"; 
    }; 
    }, 
    People2 = { 
     firstName = @"Jack DAm"; 
     email = @"[email protected]"; 
    }; 
     Address = { 
     city = @"TH"; 
    }; 
); 
+0

第一個字典中真的是「People1」,第二個字符中是「People2」嗎?爲什麼每個數組元素都使用不同的鍵? –

+0

@MartinR這是我的錯。它應該是「People1」和「People1」。 – Dashzaki

回答

0

首先,你應該實現你的對象比較法。

- (NSComparisonResult)compare:(Person *)otherObject { 
    return [self.birthDate compare:otherObject.birthDate]; 
} 

NSArray *sortedArray; 
sortedArray = [drinkDetails sortedArrayUsingSelector:@selector(compare:)]; 
0

使用塊和現代的Objective-C語法:

NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(NSDictionary *first, NSDictionary *second) { 

     return [first[@"Person"] compare:second[@"Person"]]; 

}]; 
0

使用NSSortDescriptor:

NSSortDescriptor *descriptor = [[NSSortDescriptor alloc] initWithKey:@"firstName" ascending:YES]; 
    myArray=[stories sortedArrayUsingDescriptors:[NSArray arrayWithObjects:descriptor,nil]]; 
    temp = [stories copy]; //temp is NSMutableArray 

myArray的是要排序的數組。

2

用戶排序比較

NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^(NSDictionary *a, NSDictionary *b) { 

    return [a[@"People"][@"firstname"] compare:b[@"People"][@"firstname"]]; 

}]; 

但你的重點是不一致...... 我認爲數據應該是

Array = (
{ 
People = { 
    firstName = @"Jack Adam"; 
    email = @"[email protected]"; 
}; 
Address = { 
    cityCode = @"TH"; 
}; 
}, 
People = { 
    firstName = @"Jack DAm"; 
    email = @"[email protected]"; 
}; 
    Address = { 
    city = @"TH"; 
}; 
); 
0

正如你在評論說,第一個字典的鍵是「PERSON1 「在所有數組元素中。 然後「Person1.firstName」是關鍵路徑,它給出了每個數組元素 的名字。這個關鍵路徑可以用在一個排序描述符中:

NSArray *array = ... // your array 
NSSortDescriptor *sort = [[NSSortDescriptor alloc] initWithKey:@"Person1.firstName" ascending:YES]; 
NSArray *sortedArray = [array sortedArrayUsingDescriptors:@[sort]]; 
相關問題