我正在尝试将特定键的对象设置为NSMutableDictionary
循环中的for
代码:
for(int k =0;k<currenyArry.count;k++)
{
[_currenies setObject:@"0" forKey:currenyArry[k]];
}
此处_currenies
为NSMutableDictionary
,currenyArry
为NSMutableArray
。
例如,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"}
如何修改我的代码才能实现这一目标?
答案 0 :(得分:2)
这是正确答案 - NSDictionary
和NSMutableDictionary
是基于哈希的容器,因此无序。
要按特定顺序从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]);
}];
您不需要对字典进行排序 - 只需要按键排序键,即可通过此键获取数据。