0

NSMutableArray並べ替えたいのは次のようになります。

 (
        {
            "title" = "Bags";
            "price" = "$200";
        },
        {
            "title" = "Watches";
            "price" = "$40";
        },
        {
            "title" = "Earrings";
            "price" = "$1000";
        }
 )

NSMutableArrayコレクションを含むNSMutableArrayです。price最初に で、次にで並べ替えたいtitle

NSSortDescriptor *sortByPrices = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:YES];
NSSortDescriptor *sortByTitle = [[NSSortDescriptor alloc] initWithKey:@"title" ascending:YES];

[arrayProduct sortedArrayUsingDescriptors:[NSArray arrayWithObjects:sortByPrices,sortByTitle,nil]];

ただし、それは機能していないようです。ネストされた をソートする方法はNSMutableArray?

4

3 に答える 3

5

試す

    NSMutableArray  *arrayProducts = [@[@{@"price":@"$200",@"title":@"Bags"},@{@"price":@"$40",@"title":@"Watches"},@{@"price":@"$1000",@"title":@"Earrings"}] mutableCopy];

    NSSortDescriptor *priceDescriptor = [NSSortDescriptor sortDescriptorWithKey:@""
                                                                 ascending:YES
                                                                comparator:^NSComparisonResult(NSDictionary  *dict1, NSDictionary *dict2) {
                                                                    return [dict1[@"price"] compare:dict2[@"price"] options:NSNumericSearch];
    }];

    NSSortDescriptor *titleDescriptor = [NSSortDescriptor sortDescriptorWithKey:@"title" ascending:YES];



    [arrayProducts sortUsingDescriptors:@[priceDescriptor,titleDescriptor]];

    NSLog(@"SortedArray : %@",arrayProducts);
于 2013-07-31T08:46:03.830 に答える
1

エラーはprice文字列だと思います。そのため、数値ではなく辞書式に比較されます。コンパレータ ブロックを使用して配列を並べ替え、代わりにそのブロック内の価格を解析してみてください。

[array sortUsingComparator:^(id _a, id _b) {
    NSDictionary *a = _a, *b = _b;

    // primary key is the price
    int priceA = [[a[@"price"] substringFromIndex:1] intValue];
    int priceB = [[b[@"price"] substringFromIndex:1] intValue];

    if (priceA < priceB)
        return NSOrderedAscending;
    else if (priceA > priceB)
        return NSOrderedDescending;
    else // if the prices are the same, sort by name
        return [a[@"title"] compare:b[@"title"]];
}];
于 2013-07-31T08:33:08.617 に答える
0

これを試して

アップルドキュメント

これはよくあなたを助けます

于 2013-07-31T08:39:10.713 に答える