Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/fortran/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 为什么我使用NSSortDescriptor的排序方法不';你工作不好吗?_Ios_Nsmutablearray_Nspredicate_Nssortdescriptor - Fatal编程技术网

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看一看,它提供了一个如何在不更改的情况下处理此问题的示例读取存储在距离属性中的数据。