我已经看过很多按键排序字典的例子,然后获取值,但我如何按值排序.
例如
{
blue:12;
red:50;
white:44;
}
Run Code Online (Sandbox Code Playgroud)
我希望这些按数字降序排列为:
{
red:50;
white:44;
blue:12
}
Run Code Online (Sandbox Code Playgroud)
我尝试获取一个排序的密钥nsarray,我可以从中创建有序的nsarray但结果仍然看起来无序.
NSArray* sortedKeys = [stats keysSortedByValueUsingComparator:^(id first, id second) {
if ( first < second ) {
return (NSComparisonResult)NSOrderedAscending;
} else if ( first > second ) {
return (NSComparisonResult)NSOrderedDescending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}];
Run Code Online (Sandbox Code Playgroud)
Vik*_*ica 10
从概念上讲,NSDictionary是未分类的,正如C0deH4cker已经说过的那样.
如果您需要的订单,您可以按键写入到阵列(但你可能有阵列保持它的关键是从字典中删除后的麻烦,但有教程如何创建一个使用非保留阵列CFArray)或NSSortedSet.
或者你可以继承NSDictionary - 不是很简单,因为NSDictionary是一个类集群.但幸运的是,Matt在他的精彩博文中展示了"OrderedDictionary:Subclassing Cocoa类集群"如何使用一个小技巧,一个覆盖的has-a关系.
请注意,您的代码
NSArray* sortedKeys = [stats keysSortedByValueUsingComparator:^(id first, id second) {
if ( first < second ) {
return (NSComparisonResult)NSOrderedAscending;
} else if ( first > second ) {
return (NSComparisonResult)NSOrderedDescending;
} else {
return (NSComparisonResult)NSOrderedSame;
}
}];
Run Code Online (Sandbox Code Playgroud)
不要做,你想要它做什么,因为你正在将C运算符应用于对象.现在他们的指针将被订购.
应该是这样的
NSArray* sortedKeys = [stats keysSortedByValueUsingComparator:^(id first, id second) {
return [first compare:second];
}];
Run Code Online (Sandbox Code Playgroud)
或者如果你想在标量上订购,那就是包装作为对象(即NSNumber)
NSArray* sortedKeys = [stats keysSortedByValueUsingComparator:^(id first, id second) {
if ([first integerValue] > [second integerValue])
return (NSComparisonResult)NSOrderedDescending;
if ([first integerValue] < [second integerValue])
return (NSComparisonResult)NSOrderedAscending;
return (NSComparisonResult)NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8410 次 |
| 最近记录: |