【问题标题】:Sort an NSArray with custom order使用自定义顺序对 NSArray 进行排序
【发布时间】:2013-12-09 16:29:33
【问题描述】:

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

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

【问题讨论】:

  • “按照与本字典相同的顺序对它们进行排序”没有意义,因为字典中的键没有排序。
  • 字典中的项目按照应用要求定义的顺序。不幸的是,所需的顺序不是按字母顺序排列的。这就是问题
  • @Pheepster 不,字典没有任何顺序。
  • 是的,我明白了。我正在尝试建立一个不标准的订单。我希望达到的顺序恰好是上面列出的字典的顺序
  • 创建一个键数组并按照您喜欢的顺序放置它们。

标签: ios cocoa-touch nsarray nsdictionary


【解决方案1】:

您不能,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"},
];

这样您甚至可以在字典中为订单添加一个额外的键,以便稍后在需要在菜单中插入项目时对其进行排序。

【讨论】:

    【解决方案2】:

    创建一个键数组和另一个值。然后使用dictionaryWithObjects:forKeys: 方法创建您的字典。然后你不需要做任何额外的排序,因为你有键数组。

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

    【讨论】:

    • 编辑肯定更好。真正的问题是 OP 一开始就使用了错误的数据结构。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2010-12-21
    • 2014-04-19
    • 1970-01-01
    • 2023-03-18
    • 2021-12-01
    • 1970-01-01
    相关资源
    最近更新 更多