使用自定义顺序对NSArray进行排序

时间:2013-12-09 16:29:33

标签: ios cocoa-touch nsarray nsdictionary

我有一个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"];

如何获取密钥列表并按照与此字典相同的顺序对其进行排序?谢谢!

2 个答案:

答案 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:方法创建字典。然后你不需要做任何额外的排序,因为你有一组键。

正如已经指出的那样,您无法从字典中获取有序键,因此您需要使用原始数组键来获取订单信息。