【问题标题】:Order the Output of NSMutableDictionary like the Input像输入一样订购 NSMutableDictionary 的输出
【发布时间】:2011-11-21 16:26:38
【问题描述】:

如何按输入顺序输出字典的值。

例子:

我的意见:

    [dicValue0 setObject:@"Start Date & Time" forKey:@"START_DATETIME"];
    [dicValue0 setObject:@"Specify End" forKey:@"SPECIFY_END"];
    [dicValue0 setObject:@"End Date & Time" forKey:@"END_DATETIME"];
    [dicValue0 setObject:@"Open End" forKey:@"END_OPEN"];

输出:

  • 开始日期和时间
  • 结束日期和时间
  • 指定结束
  • 开放式结束

我知道dictionary works,但我希望输出与输入的顺序相同!

我可以编写一个循环,按照输入的顺序对输出进行排序。但是,如果我有 10000+ 个值,那不是最好的和高性能的方式。 苹果有什么东西可以帮助我解决这个问题吗?

【问题讨论】:

  • NSDictionary 是无序的。您必须自己按任何索引/值对输出进行排序。

标签: objective-c ios xcode nsdictionary


【解决方案1】:

您应该创建一个数组来跟踪插入键的顺序,然后对其进行迭代以从字典中提取值。 Foundation 中没有内置的有序字典。

【讨论】:

    【解决方案2】:

    我很确定字典没有跟踪输入顺序。你是如何输出字典、循环键或只是打印字典?

    如果您知道要检索对象的顺序,则可以创建自己的键数组版本并循环遍历它以按所需顺序从字典中提取对象

    【讨论】:

      【解决方案3】:

      如果您想了解如何创建有序字典的示例,请在此处查看:http://cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html

      【讨论】:

      • 阅读了那篇文章和随附的 cmets,我认为使用组合是一个更好的主意。尝试继承 NSMutableDictionary 看起来充满了陷阱。
      • 我也找到了这个页面,但我知道解决方案,因为 cmets。
      【解决方案4】:

      您可以查看这篇文章(包括源代码)-

      OrderedDictionary: Subclassing a Cocoa class cluster,马特·加拉格尔

      【讨论】:

      • 查看我对@Senior 回答的评论
      猜你喜欢
      • 2020-10-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-01-21
      • 1970-01-01
      相关资源
      最近更新 更多