0

NSMutableArrayのに基づいNSMutableDictionaryて、キーに基づいて昇順に並べ替えようとします。キーが呼び出されProduct Sale Price、サーバーから のような文字列として返されます$350。したがって、最初の文字を部分文字列にして int 値を比較します。

//Sorting function
NSInteger priceComparator(NSMutableDictionary *obj1, NSMutableDictionary *obj2, void *context){
    int v1 = [[[obj1 valueForKey:@"Product Sale Price"]substringFromIndex:1] intValue];
    int v2 = [[[obj2 valueForKey:@"Product Sale Price"]substringFromIndex:1] intValue];
    NSLog(@"v1, v2: %i | %i",v1,v2);
    if (v1 > v2){

        NSLog(@"v2 is smaller: <%i>",v2);
        return v2;
    }
    else if (v1 < v2){

        NSLog(@"v1 is smaller: <%i>",v1);
        return v1;   
    }
    else
        return NSOrderedSame;
}


//Somewhere in the code
arrayProduct = (NSMutableArray*)[arrayProduct sortedArrayUsingFunction:priceComparator context:nil];
NSLog(@"%@",arrayProduct);//The array is not sorted as expected, still random order

したがって、基本的には、そのステップ b ステップをデバッグし、すべての比較が正しいにもかかわらず、順序に何らかの影響はありません。何か不足していますか?

編集:

ここに のいくつかの項目がありarrayProductます:

(
    {
        "Product ID" = 15119;
        "Product Sale Price" = "$395";
    },

    {
        "Product ID" = 16897;
        "Product Sale Price" = "$75";
    }
)
4

2 に答える 2

3

NSOrderedAscendingandNSOrderedDescendingの代わりにv1andを返す必要がありv2ます。並べ替えが逆の順序になった場合は、2 つのうちどちらを返すかを入れ替えます。

于 2013-08-07T04:57:56.607 に答える
0

以下のコードのように、配列をソートするためにソート記述子を使用できます。ここでのキーは、配列をソートするパラメータのキーです。たとえば、名前で並べ替えたい場合、キーは「名前」です

NSSortDescriptor *sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:@"key" ascending:YES] autorelease];
NSArray *sortDescriptors = [[NSArray alloc]init];
sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [Array sortedArrayUsingDescriptors:sortDescriptors];
于 2013-08-07T05:05:50.207 に答える