0

我有一个数组,其中包含很多信息,如纬度、经度、城市名称等。但所有这些信息都由类对象存储。

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

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

4

3 回答 3

3

假设您有一个 cityList 数组,并且想要按城市名称过滤它,您可以这样做

NSPredicate *cityNamePredicate = [NSPredicate predicateWithFormat:@"cityName contains[c] %@", @"cityName"]
NSArray *filteredCityList = [cityList filteredArrayUsingPredicate:cityNamePredicate];

无论您传入什么参数,filteredCityList 上方都将是您所需的过滤数组。这里 [cd] 表示大小写不敏感

您可以参考本教程进一步探索 NSPredicate。

于 2012-10-22T10:22:51.467 回答
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];

基于此,您可以将 name 替换为 cityName。

于 2012-10-22T10:22:39.493 回答
0

也以这种方式使用它:

NSPredicate *predicate = [NSPredicate predicateWithFormat:@"cityName contains %@", @"cityNamehere"]

NSMutableArray *filtered = [cityListArray filterUsingPredicate:predicate];
于 2012-10-22T10:39:48.307 回答