我正在尝试按升序排序NSDictionary
。我正在使用此代码:
NSDictionary *valDict = self.mGetDataDict[key][rowKey];
for (NSString *valueKey in
[[valDict allKeys] sortedArrayUsingSelector:@selector(compare:)])
{
if ([valueKey isEqualToString:@"attr"])
{
dictRow = self.mGetDataDict[key][rowKey][valueKey];
}
else {
NSString *valKey = self.mGetDataDict[key][rowKey][valueKey];
[arrSeatsStatus addObject:valKey];
}
}
这是我得到的输出:
1 = off;
10 = off;
2 = on;
3 = on;
4 = on;
5 = on;
6 = on;
7 = on;
8 = on;
9 = on;
这是必需的输出:
1: "off",
2: "on",
3: "on",
4: "on",
5: "on",
6: "on",
7: "on",
8: "on",
9: "on",
10: "off"
所需输出是来自JSON的实际值。
答案 0 :(得分:6)
您可以像这样使用NSSortDescriptor:
NSArray* array1 = @[@"1 = off", @"10 = off", @"2 = on", @"3 = on"];
NSSortDescriptor *descriptor = [NSSortDescriptor sortDescriptorWithKey:@"" ascending:YES selector:@selector(localizedStandardCompare:)];
NSLog(@"Ordered array: %@", [array1 sortedArrayUsingDescriptors:@[ descriptor ]]);
产生这个输出:
2013-06-04 12:26:22.039 EcoverdFira[3693:c07] Ordered array: (
"1 = off",
"2 = on",
"3 = on",
"10 = off"
)
NSSortedDescriptor
here上有一篇好文章。
答案 1 :(得分:2)
尝试使用这个....
//改变.......
NSArray *valDict = [[self.mGetDataDict allValues] sortedArrayUsingSelector:@selector(localizedCaseInsensitiveCompare:)];
NSMutableDictionary *orderedDictionary=[[NSMutableDictionary alloc] init];
for (NSString *valor in valDict)
{
for (NSString *clave in [yourDictionary allKeys])
{
if ([valor isEqualToString:[valDict valueForKey:clave]])
{
[orderedDictionary setValue:valor forKey:clave];
}
}
}
答案 2 :(得分:0)
获取值数组,对该数组进行排序,然后获取与该值对应的键。
您可以使用以下内容获取值:
NSArray* values = [myDict allValues];
NSArray* sortedValues = [values sortedArrayUsingSelector:@selector(comparator)];
但是,如果集合与您在示例中显示的一样,(我的意思是,您可以从键中推断出值),您可以随时对键进行排序,而不是弄乱值。
使用:
NSArray* sortedKeys = [myDict keysSortedByValueUsingSelector:@selector(comparator)];
比较器是一个消息选择器,它被发送到您想要订购的对象。
如果要订购字符串,则应使用NSString比较器。 NSString比较器是:caseInsensitiveCompare或localizedCaseInsensitiveCompare:。
如果这些都不适合您,您可以调用自己的比较器功能
[values sortedArrayUsingFunction:comparatorFunction context:nil]
作为comparatorFunction(来自AppleDocumentation)
NSInteger intSort(id num1, id num2, void *context)
{
int v1 = [num1 intValue];
int v2 = [num2 intValue];
if (v1 < v2)
return NSOrderedAscending;
else if (v1 > v2)
return NSOrderedDescending;
else
return NSOrderedSame;
}