我有一个数组,其中包含很多信息,如lat,lon,city name等。但所有这些信息都存储在类对象中。
("<GetCityList: 0x1fd334d0>",
"<GetCityList: 0x1fd33560>",
"<GetCityList: 0x1fd33310>",)
我的数组看起来像这样。如果我想要城市名称,那么首先我创建GetCityList对象然后创建object.cityName。 现在我必须通过比较cityName来搜索lat和lon。我该怎么办,因为它消耗了太多时间?我可以使用谓词吗?如何?
答案 0 :(得分:3)
假设您有一个cityList数组,并希望按城市名称对此进行过滤
NSPredicate *cityNamePredicate = [NSPredicate predicateWithFormat:@"cityName contains[c] %@", @"cityName"]
NSArray *filteredCityList = [cityList filteredArrayUsingPredicate:cityNamePredicate];
以上filteredCityList将是您在参数中传递的所需过滤数组。这里[cd]表示case和diatric不敏感
您可以参考this tutorial进一步了解NSPredicate。
答案 1 :(得分:0)
示例:
self.data = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"To Airport",@"TO/AIR", nil] forKeys:[NSArray arrayWithObjects:kName,kCode, nil]],
[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"Point-to-Point",@"PTP", nil] forKeys:[NSArray arrayWithObjects:kName,kCode, nil]],[NSDictionary dictionaryWithObjects:[NSArray arrayWithObjects:@"From Airport",@"FR/AIR", nil] forKeys:[NSArray arrayWithObjects:kName,kCode, nil]], nil];
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"(name CONTAINS[cd] %@)",searchText];
self.searchableData = [self.data filteredArrayUsingPredicate:predicate];
基于此,您可以使用cityName替换名称。
答案 2 :(得分:0)
也可以这样使用它:
NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cityName contains %@", @"cityNamehere"]
NSMutableArray *filtered = [cityListArray filterUsingPredicate:predicate];