我使用NSPredicate
过滤表结果
NSPredicate *resultPredicate = [NSPredicate
predicateWithFormat:@"Name CONTAINS[cd] %@ OR Address CONTAINS[cd] %@",
searchText,
searchText];
searchResults = [NSMutableArray array];
for (key in dict) {
if ([resultArray containsObject:key]) {
NSArray *array = [dict objectForKey:key];
matches = [array filteredArrayUsingPredicate:resultPredicate];
if (matches.count > 0) {
[searchResults addObjectsFromArray:matches];
// sorting array
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
[searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
}
}
}
}
然后使用NSSortDescriptor
对结果数组进行排序
NSSortDescriptor *sort=[NSSortDescriptor sortDescriptorWithKey:@"Distance" ascending:YES];
[searchResults sortUsingDescriptors:[NSArray arrayWithObject:sort]];
它是有效的,但不是所有的结果:
发布于 2013-05-13 23:25:16
排序不正确,因为它将Distance
解释为字符串,而不是数字。字符串是按字典顺序排序的,这意味着100.00 km
在2.00 km
之前,因为100.00 km
的起始数字1
小于2.00 km
的起始数字2
。
您可以通过在表示距离时使用NSNumber
代替NSString
来解决这个问题,或者通过用零填充所有值来强制使用相同的位数,以获得相同的长度。
发布于 2013-05-13 23:26:09
您应该对数字进行排序,这是以米为单位的归一化距离,而不是显示字符串(在中使用数字对字符串进行排序需要不同的逻辑)。
https://stackoverflow.com/questions/16525554
复制相似问题