另一种说法可能是...
NSPredicate "state.country == 'United States'"
就像
SQL "Select * from state where state.country = 'United States'
那么如何将其作为谓词?
SQL "Select state.name from state where state.county = 'United States'"
原始邮件:
我有一个字典数组的字典,如下所示:
lists
states
state
country
country
country
我有按国家/地区过滤州的代码。但是,我打赌有一种更清洁的方式。
NSArray *states = [lists valueForKey:@"states"];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countryname == %@", selectedCountry];
states = [states filteredArrayUsingPredicate:predicate];
states = [states valueForKeyPath:@"state"];
想法?
答案 0 :(得分:0)
我只使用NSArray而不是NSDictionary,所以我不知道这有多大,但是我正在使用它:
matchingTour = [self.tours filteredArrayUsingPredicate:[NSPredicate predicateWithFormat:@"tourCode == %@", tourCode]];
其中self.tours是Tour对象的NSArray。 Tour对象具有NSString * tourCode的属性。 matchingTour属于NSArray类型。
当我读到这篇文章时,我感到非常惊讶,尝试了它并且第一次工作了,我得到了一个只包含一个游览的数组!
在“树”中,您不会显示任何属性名称“countryname” - 只是想知道。
答案 1 :(得分:0)
你几乎得到了它:
NSDictionary * lists = ...;
这是你的原始词典
NSArray *states = [lists objectForKey:@"states"];
这是从字典中检索状态数组。大概这些是实际的“状态”对象(即,你创建了一个名为State
的类
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"countryname == %@", selectedCountry];
这会创建一个谓词,将-[State countryname]
的结果与selectedCountry
变量引用的值进行比较。或者,如果states
数组包含字典,则会将-[NSDictionary objectForKey:@"countryname"]
的结果与selectedCountry
引用的值进行比较。
states = [states filteredArrayUsingPredicate:predicate];
这将从[[aState countryname] isEqual:selectedCountry]
states = [states valueForKeyPath:@"name"];
这将创建一个包含每个州名称的新数组。此新数组的顺序与过滤的states
数组的顺序相同。