Objective c 按键排序的NSDictionary实例的快速枚举 概述 我使用快速枚举来迭代NSDictionary实例 我希望NSDictionary实例是基于键的升序枚举的,但事实似乎并非如此 我想做的是: 我希望能够使用快速枚举以键的升序遍历NSDictionary实例

Objective c 按键排序的NSDictionary实例的快速枚举 概述 我使用快速枚举来迭代NSDictionary实例 我希望NSDictionary实例是基于键的升序枚举的,但事实似乎并非如此 我想做的是: 我希望能够使用快速枚举以键的升序遍历NSDictionary实例,objective-c,nsdictionary,fast-enumeration,Objective C,Nsdictionary,Fast Enumeration,注意:请参见预期产量与实际产量 问题 我的实现是否出错 NSDictionary的快速枚举是否保证基于键的排序 如果没有,那么是否有一个解决方案,但使用快速枚举 例子 实际产量 不,您的实现是正确的 NSDictionary fast枚举不保证排序(由于实现为哈希容器,所以它不会按顺序输出任何内容) 不,你得自己分类 对于您接收对象的顺序没有任何保证 所有键 返回包含字典键的新数组。 -(NSArray*)所有密钥 返回值 包含字典键的新数组,如果字典没有条目,则为空数组。 讨论 未定义数组中元

注意:请参见预期产量与实际产量

问题
  • 我的实现是否出错
  • NSDictionary的快速枚举是否保证基于键的排序
  • 如果没有,那么是否有一个解决方案,但使用快速枚举
  • 例子 实际产量
  • 不,您的实现是正确的
  • NSDictionary fast枚举不保证排序(由于实现为哈希容器,所以它不会按顺序输出任何内容)
  • 不,你得自己分类

  • 对于您接收对象的顺序没有任何保证

    所有键
    返回包含字典键的新数组。
    -(NSArray*)所有密钥
    返回值
    包含字典键的新数组,如果字典没有条目,则为空数组。
    讨论
    未定义数组中元素的顺序

    因此,我的建议是,如果您的字典不经常更改,请按您需要的顺序缓存一个
    NSArray


    如果您的字典经常更改,您可能需要在需要时对所有键进行排序。

    可能的重复项,但尽管这在生成的已排序键数组上使用快速枚举,但在字典上却没有使用快速枚举,这正是OP所说的他想要做的……感谢NSResponder和Matt的响应,这是一个很好的工作。谢谢文斯,这是一个很好的建议。我想如果键的顺序比值的顺序更重要,那么我可能会创建字典,用键作为我的值,用我的值作为键。然后使用keysortedbyvalueusingselector:@user1046037方法它始终取决于您的目标和需要。数组有助于保持事物的有序性,因此,根据情况,您可能会考虑在数组中保存的一些自定义类,并根据它的一个属性排序。我只是在抛砖引玉。。。
    for (NSString *key in [[d1 allKeys] sortedArrayUsingSelector:@selector(compare:)])
    {
        id value = [d1 valueForKey:key];
        ...
    }
    
    key = 0xa83      [key intValue] = 10     value = AAA
    key = 0x1483     [key intValue] = 20     value = BBB
    key = 0x1e83     [key intValue] = 30     value = CCC
    
    key = 0x1e83     [key intValue] = 30     value = CCC
    key = 0xa83      [key intValue] = 10     value = AAA
    key = 0x1483     [key intValue] = 20     value = BBB
    
    for (NSString *key in [[d1 allKeys] sortedArrayUsingSelector:@selector(compare:)])
    {
        id value = [d1 valueForKey:key];
        ...
    }