我想从字典中填充一个选择器,我有一本字典
NSMutableArray* type1names = [NSMutableArray arrayWithObjects:@"--",@"AA",@"AB",@"BA",@"BB",@"BC",@"CB",@"CC",@"CD",@"DC",@"DD",@"FF",nil];
NSMutableArray* type1points = [NSMutableArray arrayWithObjects:@"-",@"4",@"3.7",@"3.3",@"3.0",@"2.7",@"2.3",@"2.0",@"1.7",@"1.3",@"1",@"0", nil];
NSMutableDictionary *type1 = [[NSMutableDictionary alloc] initWithObjects:type1points forKeys:type1names];
像这样初始化。当我尝试将它们放回到字典中并使用下面的代码时,会出现问题。
- (NSString *)pickerView:(UIPickerView *)thePickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
YOHAppDelegate *app = [UIApplication sharedApplication].delegate;
NSString *key = [[app.pointsDictionary allKeys] objectAtIndex:row];
return key;
}
他们从字典无序回来。不是随机的,总是在相同的位置,但没有任何逻辑系统。
有没有办法实现这个,或者我应该为此使用多个数组?
答案 0 :(得分:3)
热门舔说,NSDictionary不保存订单。但是Matt Gallagher shows how to create an OrderedDictionary通过继承NSMutableDictionary。
另一方面,你应该认真对待他的警告。但是以某种方式,他为子类提供了一个模式,可以在没有子类化的情况下使用:您可以定义一个类,它包含一个字典和一个数组,但是继承自NSObject。定义一个setObjectForKey:
方法,转发到NSDictionary并将对象添加到数组中(只是,如果它不在字典中)。添加方法objectForKey:
,转发到字典和转发到数组的objectAtIndex:
。
答案 1 :(得分:2)
NSDictionary没有(外部定义/记录)其元素的顺序。如果你想要它们,你需要一个不同的方案。