0

辞書を含む配列(seachResult)があり、文字列形式の数値である辞書の「価格」キーに従ってこの配列をソートしたいと考えています。このコードを試してみましたが、「価格」の並べ替えでは機能しませんが、数値である pid では機能します。「価格」(文字列形式の数値) に従って並べ替えるにはどうすればよいですか?

   NSSortDescriptor *sortByPrice = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
    NSArray *sortDescriptors = [NSArray arrayWithObject:sortByPrice];
    NSArray *sortedArray = [self.seachResult sortedArrayUsingDescriptors:sortDescriptors];
    NSLog(@"%@",sortedArray );

self.searchResult のサンプル データは次のとおりです。

2013-07-17 02:04:55.012 MyApp[57014:16a03] sorted array of dictionaries: (
    {
    cid = 2;
    image = "http:///images/loginlogo.png";
    latitude = "48.245565";
    longitude = "16.342333";
    manual = "";
    movie = "http://jplayer.org/video/m4v/Big_Buck_Bunny_Trailer.m4v";
    pcode = 023942435228;
    pid = 1;
    pname = "example product";
    price = "12.00";
    qrcode = "";
    rid = 1;
    rname = "Example Retailer Name";
    sale = 0;
    "sale_percent" = 0;
    "sale_price" = "0.00";
    text = "here is text about sample product number 1...\nasdasdasda\nsdfsdfsd\nSdfsdf\nSDfsdfs\ndfsdfsdf\n\n\n";
},
    {
    cid = 2;
    image = "http:///testImage.png";
    latitude = "48.245565";
    longitude = "16.342333";
    manual = "";
    movie = "";
    pcode = 1;
    pid = 2;
    pname = "sample product 2";
    price = "126.00";
    qrcode = "";
    rid = 1;
    rname = "Example Retailer Name";
    sale = 1;
    "sale_percent" = 20;
    "sale_price" = "99.99";
    text = "here is text about sample product number 2...\nblah blah blah\nasdasdasd\nASdasdas\nASdasdasd";
},
    {
    cid = 1;
    image = "";
    latitude = "";
    longitude = "";
    manual = "";
    movie = "";
    pcode = 1;
    pid = 3;
    pname = "test product";
    price = "46.00";
    qrcode = "";
    rid = 2;
    rname = "";
    sale = 0;
    "sale_percent" = 0;
    "sale_price" = "35.00";
    text = "some text here...

\nasdasd \nasd \na \nsd \nas \nd"; } )

私もこのコードを試しました:

    NSSortDescriptor *hopProfileDescriptor =
    [[NSSortDescriptor alloc] initWithKey:@"price"
                                ascending:YES];

    NSArray *descriptors = [NSArray arrayWithObjects:hopProfileDescriptor, nil];
    NSArray *sortedArrayOfDictionaries = [self.seachResult
                                          sortedArrayUsingDescriptors:descriptors];

    NSLog(@"sorted array of dictionaries: %@", sortedArrayOfDictionaries);

しかし、まだ機能しません。

4

2 に答える 2

0

価格データが (NSString と NSNumber) 異なるように見えるため、代わりに sortedArrayUsingComparator: を使用してみてください。例えば:

NSArray *sortedArray = [unsortedArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
    id value1 = [obj1 objectForKey:@"price"];
    float float1 = [value1 floatValue];
    id value2 = [obj2 objectForKey:@"price"];
    float float2 = [value2 floatValue];
    if (float1 < float2) {
        return NSOrderedAscending;
    }
    else if (float1 > float2) {
        return NSOrderedDescending;
    }
    return NSOrderedSame;
}];

これはちょっと醜いですが、始める必要があります。また、壊れやすいです。価格で NSNumber または NSString 以外のものを取得すると、クラッシュする可能性があります。

于 2013-07-16T23:53:22.197 に答える