2009-11-24 2 views
0

사전 중 사전을 가지고 있으며 plist에서 검색했습니다.IPHONE : 사전 내의 하위 사전에서 값 검색

상위 계층 사전이 COUNTRIES이고 각 하위 사전이 COUNTRY라고 가정합니다.

각 국가 하위 사전 내가 확인하려면 어떻게

NSMutableDictionary * countries = [NSMutableDictionary dictionaryWithContentsOfFile:path]; 

같이 변수에 사전과 잠수정을 검색 한 후 등

이름, 통화, 인구, 깃발, 같은 키가 "유로"라는 이름의 통화가 있다면?

즉, 하위 사전의 키 값을 확인 중입니다 ... 가능합니까? 방법?

미리 감사드립니다.

참고 : 사전 내의 사전이거나 사전 내의 사전이나 배열의 사전이 아닙니다. 각 하위 사전은 숫자를 사용하여 기본 사전에 저장됩니다. 그래서, 하위 사전 # 1은 예를 들어, 프랑스, ​​유로, 3 천만 명의 사람들이 사용하는 사전이 될 수 있습니다.

프랑스 사전이 기본 사전에 있는지 확인해야합니다.

답변

1

"유로"(NSArray에서)라는 통화가있는 국가를 얻으려면이 방법을 사용하십시오.

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

당신이 그런 나라가 존재하는지 여부를 확인하기 만하면 모두가, 당신은 단순한 if (filteredCountries.count > 0) { }을 할 수 있다면.

Sidenote : 국가 이름도 내부 NSDictionary (아마도 국가 이름은 외부 사전 키)에 저장되어있는 경우 최상위 데이터 구조가 NSDictionary가되는 이유는 없습니다. NSArray는 외부 구조가 더 적절할 것인가?

+0

스 브로 세트가 맞습니다 (bext 응답 참조). 그것은 내가 가진 것입니다. 질문에 메모를 추가했습니다. – SpaceDog

+0

질문에 대한 답변이 나옵니까? 이 스 니펫은 필요한 것을 처리해야합니다. –

+0

예. 감사!!!!! – SpaceDog

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."); 
+0

국가 사전에는 질문 설명에 따라 @ "currency"라는 키가있는 개체가 포함되지 않습니다. 다시 읽으시기 바랍니다. –

+0

실제로 그는 반대의 말 : "각 COUNTRY 하위 사전에는 이름, 통화, 인구, 깃발 등의 키가 있습니다." 이 키들과 연관된 값은 올바르게 읽는다면'NSDictionary' 객체입니다. –

+0

다시 읽으십시오. 데이터가 어떤 구조인지 잘 모르겠습니다. 설명이있을 때까지 내 답변을 남겨 둘 것입니다. 어느 쪽이든, 당신의 대답이나 제 문제를 해결하는 데 사용할 수 있습니다. –