Ios 为什么我使用NSSortDescriptor的排序方法不';你工作不好吗?
我使用Ios 为什么我使用NSSortDescriptor的排序方法不';你工作不好吗?,ios,nsmutablearray,nspredicate,nssortdescriptor,Ios,Nsmutablearray,Nspredicate,Nssortdescriptor,我使用NSPredicate NSPredicate *resultPredicate = [NSPredicate predicateWithFormat:@"Name CONTAINS[cd] %@ OR Address CONTAINS[cd] %@", searchText,
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]];
它正在发挥作用,但并非所有结果都如此:
排序不正确,因为它将距离解释为字符串,而不是数字。字符串按字典顺序排列,这意味着
100.00km
位于2.00km
之前,因为1
是100.00km
的起始数字,小于2.00km
的起始数字2
在表示距离时,可以使用
NSNumber
代替NSString
,或者通过将所有值填充为零来实现相同的长度,从而强制使用相同的位数。排序不正确,因为它将距离
解释为字符串,而不是数字。字符串按字典顺序排列,这意味着100.00km
位于2.00km
之前,因为1
是100.00km
的起始数字,小于2.00km
的起始数字2
在表示距离时,您可以使用
NSNumber
代替NSString
来修复此问题,或者通过将所有值填充为零来实现相同的长度,从而强制使用相同的位数。您应该按数字排序,这是以米为单位的标准化距离,而不是显示字符串(按中的数字排序字符串需要不同的逻辑)。您应该按数字排序,这是以米为单位的标准化距离,而不是显示字符串(按中的数字排序字符串需要不同的逻辑).距离的原始值是什么样子的?它们是数字、字符串吗?所有东西都标准化为米吗?NSString*dist=[NSString stringWithFormat:@“%.2f km”,距离/1000];距离的原始值是什么样子的?它们是数字、字符串吗?所有东西都标准化为米吗?NSString*dist=[NSString stringWithFormat:@“%.2f km”,距离/1000];好的,你能添加一个按数字排序的示例吗?@PavelKaljunen看一看,它提供了一个示例,说明如何在不更改存储在Distance
属性中的数据的情况下处理此问题。好的,你能添加一个按数字排序的示例吗?@PavelKaljunen看一看,它提供了一个如何在不更改的情况下处理此问题的示例读取存储在距离属性中的数据。