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*)所有密钥 返回值 包含字典键的新数组,如果字典没有条目,则为空数组。 讨论 未定义数组中元
对于您接收对象的顺序没有任何保证 所有键
返回包含字典键的新数组。
-(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];
...
}