依照 nsdictionary 中的值來排序

這也是新手滿常見的問題, nsdictionary 裡有 name 跟 score 的值,產生一個由低分到高分的 keys 陣列。
這個方法可以自訂一些條件,nsmutabledictionary也同樣適用喔。


NSMutableDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

[NSDictionary dictionaryWithObjectsAndKeys:@"mark", @"name", @"100", @"score", nil], @"mark",
[NSDictionary dictionaryWithObjectsAndKeys:@"tom", @"name", @"78", @"score", nil], @"tom",
[NSDictionary dictionaryWithObjectsAndKeys:@"mary", @"name", @"81", @"score", nil], @"mary",
[NSDictionary dictionaryWithObjectsAndKeys:@"sandy", @"name", @"65", @"score", nil], @"sandy",
[NSDictionary dictionaryWithObjectsAndKeys:@"sam", @"name", @"98", @"score", nil], @"sam",

nil];

NSArray *blockSortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2) {

if ([[obj1 objectForKey:@"score"] intValue] > [[obj2 objectForKey:@"score"] intValue]) {

return (NSComparisonResult)NSOrderedDescending;
}

if ([[obj1 objectForKey:@"score"] intValue] < [[obj2 objectForKey:@"score"] intValue]) {

return (NSComparisonResult)NSOrderedAscending;
}

return (NSComparisonResult)NSOrderedSame;

}];

發表迴響