0

ユーザーが価格 (int) または距離 (float) でソートできるようにしています。

次のようにデータを格納する NSdictionary オブジェクトの NSMutableArray があります。

({"asking_price" = 588832;
 distance = "2.0250673476224";
 id = 510cc41cc7e24c6c6d000000;
 "number_of_bathrooms" = 2; )}

私のソート機能は次のとおりです。

+(void) sort:(NSMutableArray *)classifieds:(NSString *)key:(Boolean)isAscending
{

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:isAscending];
    [classifieds sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}

私の質問は、distance がディクショナリ内の文字列であり、price が int であると考えています。関数を実際に変更して、"distance" のキーを渡すときに float で、" のキーを渡すときに int でソートする方法を教えてください。提示価格"

前もって感謝します

4

2 に答える 2

3
+(void) sort:(NSMutableArray *)classifieds:(NSString *)key:(Boolean)isAscending
{
    NSSortDescriptor *sortDescriptor;
    if ([key isEqualToString:@"distance"])
    {
        sortDescriptor = [[NSSortDescriptor alloc] initWithKey:key ascending:isAscending comparator:^NSComparisonResult(id obj1, id obj2) {
            if ([obj1 floatValue] < [obj2 floatValue])
                return NSOrderedAscending;
            else
                return NSOrderedDescending;
        }];
    }
    else
    {
        sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:key ascending:isAscending];
    }
    [classifieds sortUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];
}
于 2013-02-03T08:01:02.127 に答える
0

これは、制御できない関数が NSString をプリミティブ データ型に変換する方法を知らないため、おそらく不可能です。3 つのオプションがほとんど残っています。

1) 独自のソート アルゴリズムを考え出す (Google ではそれほど難しくありません)

2) 距離を int/float に変更する

3) NSSortDescriptor のサブクラスを作成し、ソート方法をオーバーライドします (これに使用するコードが再利用可能であることを除いて、最初の選択とほぼ同じ結果になります)

于 2013-02-03T07:52:13.630 に答える