【问题标题】:Objective C NSDictionary: How can I sort my NSDictionary keys based on the key's valueObjective C NSDictionary:如何根据键的值对我的 NSDictionary 键进行排序
【发布时间】:2017-03-27 00:23:07
【问题描述】:
我有一个等于以下值的 NSDictonary。
A = {
order = 3;
};
B = {
order = 1;
};
C = {
order = 2;
};
我需要根据订单号从小到大对键 A、B 和 C 进行排序。在此示例中,键应显示为以下 B、C 和 A。我该如何实现?
【问题讨论】:
标签:
ios
objective-c
sorting
dictionary
nsdictionary
【解决方案1】:
NSMutableDictionary 的键顺序(在您的情况下为 A、B、C)由系统决定。你无法控制它。
但是您可以使用 NSMutableArray(不是 NSArray,因为它是不可变的,即无法修改)来实现您的目标。数组中的每个元素将是一个单独的 NSDictionary,其中包含 2 个键值对——一个用于键,一个用于顺序,只是为了让事情更简单。
这是您需要的代码:
NSMutableArray *arrayOfDictionaries = [@[
@{ @"key" : @"A", @"order" : @3 },
@{ @"key" : @"B", @"order" : @1 },
@{ @"key" : @"C", @"order" : @2 },
] mutableCopy];
[arrayOfDictionaries sortUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) {
NSNumber *number1 = obj1[@"order"];
NSNumber *number2 = obj2[@"order"];
return [number1 compare:number2];
}];
NSLog(@"array = %@", arrayOfDictionaries);
这些是结果,修改后的数组的样子:
array = (
{
key = B;
order = 1;
},
{
key = C;
order = 2;
},
{
key = A;
order = 3;
}
)