/ / Zoradenie negatívnych a pozitívnych čísel v objektívoch c - iphone, ios, objektív - c, nsarray, nsdictionary

Triedenie záporných a pozitívnych čísel v objektívnych c - iphone, ios, objektív - c, nsarray, nsdictionary

Som výpis množstva percentuálneho ako veci pre položku prostredníctvom webservice.The odpoveď, ktorú dostanem, je rad slovníkov podobný nižšie code.I potrebujú v triedenom formáte

NSArray *numberArray = [NSArray arrayWithObjects:
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:-12.0], @"price", nil],
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:-86.0],@"price", nil],
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:-8.0],@"price", nil],
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:12.0],@"price", nil],
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:2.0],@"price", nil],
[NSDictionary dictionaryWithObjectsAndKeys:[NSNumber numberWithFloat:112.0],@"price", nil], nil];

Tu je záznam reakcie JSON

[
{
price = "-12";
},
{
price = "-86";
},
{
price = "-8";
},
{
price = 12;
},
{
price = 2;
},
{
price = 112;
}
]

odpovede:

4 pre odpoveď č. 1
NSArray *sortedResult = [numberArray sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {
NSNumber *num1 = [obj1 objectForKey:@"price"];
NSNumber *num2 = [obj2 objectForKey:@"price"];
return [num1 compare:num2];
}];
NSLog(@"---%@",sortedResult);

Ak chcete sortedResult v zostupnom poradí, vymeniť čísla num1 a num2 v
return statement.


2 pre odpoveď č. 2

Ak sú ceny uložené ako NSNumber objektov, potom metóda z odkazu @trojanfoe (Najlepší spôsob, ako triediť NSArray objektov NSDictionary?) by mali fungovať:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"price" ascending:YES];
NSArray *sorted = [numberArray sortedArrayUsingDescriptors:@[sd]];

Ale z vašej poslednej pripomienky sa zdá, že ceny sú uložené ako reťazce, V tomto prípade nasledujú práce, pretože floatValue konvertuje každý reťazec na a hodnota s pohyblivou hodnotou:

NSSortDescriptor *sd = [NSSortDescriptor sortDescriptorWithKey:@"price.floatValue" ascending:YES];
NSArray *sorted = [numberArray sortedArrayUsingDescriptors:@[sd]];

1 pre odpoveď č. 3

Nie triedite čísla. Triedite slovníky podľa spoločného prvku "ceny":

sortedArray = [numberArray sortedArrayUsingComparator:^NSComparisonResult(NSDictionary *a, NSDictionary *b) {
return [a[@"price"] compare:b[@"price"]];
}];

0 pre odpoveď č. 4
sortedArray = [numberArray sortedArrayUsingComparator:^NSComparisonResult(id a, id b) {
float first  = [(NSNumber *)a[@"price"] floatValue];
float second = [(NSNumber *)b[@"price"] floatValue];

if (first > second) {
return NSOrderedDescending;
} else if (first < second) {
return NSOrderedAscending;
}

return NSOrderedSame;
}];