1

Sort Descriptorを使用して距離配列を昇順で並べ替えていますが、距離を保持しないインデックスが少ないため、距離が見つからない場所に、配列を正しく並べ替えるのに役立つより多くの数を格納しています。ただし、距離が見つからない場所に多数を格納することは、適切なアプローチではありません。したがって、NSArrayでより多くの数値をハードコーディングせずに、距離を昇順で検出された場所と検出されなかった場所で並べ替えるソリューションを探しています。ソートのコードは以下の通りです。

NSLog(@"%@", self.distanceArr);  // self.distanceArr is a Mutable Array
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"OnlyDistance" ascending:YES];
    NSArray *sort = [self.distanceArr mutableCopy];
    NSArray *sortedArray = [sort sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

    NSLog(@"Sorted %@",sortedArray);
    NSLog(@"%d",[sortedArray count]);

    self.sortedBusinessDetArr = [sortedArray mutableCopy];


    [self.searchTbl reloadData];

そして私の配列は次のとおりです

(
{
    OnlyDistance = "10000.0";  ///   Hard Coded Value where distance is not found.
},
    {
    OnlyDistance = "13089.53";
},
    {
    OnlyDistance = "12991.81";
}, 
{
    OnlyDistance = "10000.0";  ///   Hard Coded Value where distance is not found.
}, 
{
    OnlyDistance = "10000.0";  ///   Hard Coded Value where distance is not found.
},
    {
    OnlyDistance = "13089.53";
}

)。

OnlyDistanceは、float値が格納されるNSNumberです。また、0.0を保存した場合はNSNumberであるため、ゼロを上にして昇順で並べ替えられます。そして、ゼロを保持している値または見つからない結果を下にソートし、値を保持しているインデックスのみを上に配置する必要があります。降順で並べ替えることはできません。

4

1 に答える 1

1

このようにしてください

NSSortDescriptor *sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"self" ascending:NO];
[self.distanceArr sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
于 2012-12-04T08:15:40.027 に答える