我有一个NSMutableDictionary对象,其中包含iPhone应用程序的菜单项列表。菜单项的所需顺序不是按字母顺序排列的,因此排序键的标准方式实际上不是一种选择。我的字典如下,并按所需顺序初始化(我知道字典没有排序 - 我需要按此顺序对键数组进行排序):
menuDict = [[NSMutableDictionary alloc] init];
[menuDict setObject:@"Main Menu" forKey:@"EntryViewController"];
[menuDict setObject:@"States Lookup" forKey:@"AllStatesViewController"];
[menuDict setObject:@"Favorites" forKey:@"FavoritesViewController"];
[menuDict setObject:@"Help" forKey:@"HelpViewController"];
[menuDict setObject:@"About" forKey:@"AboutViewController"];
如何获取密钥列表并按照与此字典相同的顺序对其进行排序?谢谢!
答案 0 :(得分:2)
您不能,NSDictionary
不保存添加项目的顺序。为此,您应该使用NSArray
。
以下是您如何使用它的示例:
NSArray *menuArray = @[
@{ @"Title" : @"Main Menu", @"Controller" : @"EntryViewController"},
@{ @"Title" : @"States Lookup", @"Controller" : @"AllStatesViewController"},
@{ @"Title" : @"Favorites", @"Controller" : @"FavoritesViewController"},
@{ @"Title" : @"Help", @"Controller" : @"HelpViewController"},
@{ @"Title" : @"About", @"Controller" : @"AboutViewController"},
];
这样您甚至可以在字典中为订单添加额外的密钥,因此如果您需要稍后在菜单中插入项目,可以稍后对其进行排序。
答案 1 :(得分:0)
创建一个键数组和另一个值。然后使用dictionaryWithObjects:forKeys:
方法创建字典。然后你不需要做任何额外的排序,因为你有一组键。
正如已经指出的那样,您无法从字典中获取有序键,因此您需要使用原始数组键来获取订单信息。