我使用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]];
它有效,但不是所有结果:
答案 0 :(得分:5)
排序不正确,因为它将Distance
解释为字符串,而不是数字。字符串按字典顺序排序,意味着100.00 km
位于2.00 km
前面,因为1
的最初数字100.00 km
小于2
{1}},2.00 km
的初始数字。
您可以在表示距离时使用NSNumber
代替NSString
来修复此问题,或者通过用零填充所有值来强制使用相同的位数来实现相同的长度。
答案 1 :(得分:2)
您应该对数字进行排序,这是以米为单位的标准化距离,而不是显示字符串(对数字中的字符串排序需要不同的逻辑)。