数组中的谓词

时间:2012-10-22 10:13:51

标签: iphone

我有一个数组,其中包含很多信息,如lat,lon,city name等。但所有这些信息都存储在类对象中。

("<GetCityList: 0x1fd334d0>",
"<GetCityList: 0x1fd33560>",
"<GetCityList: 0x1fd33310>",)

我的数组看起来像这样。如果我想要城市名称,那么首先我创建GetCityList对象然后创建object.cityName。 现在我必须通过比较cityName来搜索lat和lon。我该怎么办,因为它消耗了太多时间?我可以使用谓词吗?如何?

3 个答案:

答案 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];