如何以正确的顺序将对象和键设置为NSMutabledictionary

时间:2014-06-10 13:40:11

标签: ios objective-c nsdictionary nsmutabledictionary

我正在尝试将特定键的对象设置为NSMutableDictionary循环中的for

代码:

for(int k =0;k<currenyArry.count;k++)
{
    [_currenies setObject:@"0" forKey:currenyArry[k]];
}

此处_curreniesNSMutableDictionarycurrenyArryNSMutableArray

例如,currentArry是:

[1,3,5,10,100,500,1000];

_currenies字典中设置对象后,它看起来像:

{1:"0",10:"0",100:"0",1000:"0",3:"0",5:"0",500:"0"}

但我需要基于currenyArry的订单

{1:"0",3:"0",5:"0",10:"0",100:"0",500:"0",1000:"0"}

如何修改我的代码才能实现这一目标?

2 个答案:

答案 0 :(得分:2)

这是正确答案 - NSDictionaryNSMutableDictionary是基于哈希的容器,因此无序

要按特定顺序从NSDictionary获取数据,您可以订购密钥,然后按照所需的顺序从容器中提取数据:

for (NSNumber *key in currenyArry) {
    NSLog(@"Key: %@ Value: %@", key, _currenies[key]);
}

这将按照currenyArray定义的顺序生成键值对。当然,您的代码可以根据需要进行任何其他处理,而不是简单地打印键值对。

答案 1 :(得分:0)

您可以尝试我的代码:

NSArray *currentArry = @[@1,@3,@5,@10,@100,@500,@1000];
NSMutableDictionary *dict = [NSMutableDictionary new];
[currentArry enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    [dict setObject:@0 forKey:obj];
}];

NSArray * sortedKeys = [[dict allKeys] sortedArrayUsingSelector: @selector(compare:)];

[sortedKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
    NSLog(@"%@:%@",obj,dict[obj]);
}];

您不需要对字典进行排序 - 只需要按键排序键,即可通过此键获取数据。