是否可以通过索引获取字典键?
我正在尝试使用字典作为选择器 View 的数据源,并希望通过以下委托(delegate)方法访问它:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component{
if (component == 0){
return [NSString stringWithFormat:@"%@",[myDict // how to get the key]];
}
编辑--
myDict 是这样的:
项目 1
- 子项目 1
- 子项目 2
项目 2
- 子项目 1
- 子项目 2
我想将 myDict 用作具有 2 个部分的选择器 View 的数据源:
第 0 部分 = myDict 键(第 1 项、第 2 项)
第 1 节 = 所选第 0 节行(子项 1、子项 2)的相应 myDict 值
最佳答案
因为NSDictionary
是一个无序 关联容器,所以它没有索引的概念。它的键是任意排序的,并且该顺序将来可以更改。
您可以从字典中获取键的NSArray
,并对其应用索引:
NSArray *keys = [myDict allKeys]; // Warning: this order may change.
但是,只有在字典保持不变的情况下,这种索引方案才会保持一致:例如,如果您使用 NSMutableDictionary
,添加一个额外的键可能会改变现有键的顺序。这会导致极难调试的问题。
更好的方法是将选择器的项目放入有序容器中,例如 NSArray
。为选择器项目创建一个特殊的类,例如
@interface MyPickerItem : NSObject
@property (readwrite, nonatomic) NSString *item1;
@property (readwrite, nonatomic) NSString *item2;
@end
从你的字典中创建这样的 MyPickerItem
对象的 NSArray
,按照你希望它们出现在选择器 View 中的方式对它们进行排序(比如,按字母顺序 item1
,然后通过 item2
) 并使用 NSArray
作为选择器 View 的数据源:
- (NSString *)pickerView:(UIPickerView *)pickerView titleForRow:(NSInteger)row forComponent:(NSInteger)component {
MyPickerItem *p = myArray[row];
switch (component) {
case 0: return p.item1;
case 1: return p.item2;
}
return @"<-ERROR->";
}
关于ios - 通过索引获取 NSDictionary 键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23658209/