IPHONE:在Dictionary中的子字典中搜索值

时间:2009-11-24 02:20:48

标签: iphone iphone-sdk-3.0

我有一本词典词典,我从一个词典中检索过。

假设高层次词典是COUNTRIES,每个子词典都是COUNTRY。

每个COUNTRY子词典都有名称,货币,人口,旗帜等键。

中检索字典及其子变量之后
NSMutableDictionary * countries = [NSMutableDictionary dictionaryWithContentsOfFile:path];

如何检查是否存在名为“euros”的货币?

我的意思是,我正在检查子字典的键中的值...是否可能?怎么样?

提前感谢。

注意:它是字典中的字典,而不是字典中的数组或数组中的字典。每个子字典使用数字存储在主字典内。因此,在子字典#1内可以是字典,其中键例如是法国,欧元,3000万人。

我需要查看法语子词典是否存在于主词典中。

2 个答案:

答案 0 :(得分:1)

使用此选项可以获取任何名为“Euro”的货币(在NSArray中)。

NSArray *allCountries = [countries allValues];
NSPredicate *euroPredicate = [NSPredicate predicateWithFormat:@"currency == %@", @"Euro"];
NSArray *filteredCountries = [allCountries filteredArrayWithPredicate:euroPredicate];

如果你需要做的就是检查这样的国家是否存在,那么你可以做一个简单的if (filteredCountries.count > 0) { }

旁注:如果国家名称也存储在内部NSDictionary中(可能是国家名称是外部字典键),我认为顶级数据结构不是NSDictionary的原因 - 也许NSArray作为外部结构会更合适吗?

答案 1 :(得分:1)

NSDictionary *_currencyDict = [countries objectForKey:@"currency"];
NSArray *_currencies = [_currencyDict allValues]; 
NSPredicate *_currencyPredicate = [NSPredicate predicateWithFormat:@"SELF IN %@", _currencies];
BOOL _eurosResult = [_currencyPredicate evaluateWithObject:@"euros"];

if (_eurosResult)
   NSLog(@"The value 'euros' is in the 'currency' dictionary, within the 'countries' dictionary.");
else
   NSLog(@"The value 'euros' was not found.");