如何在ios中对多个NSArray升序和降序排序

iOS*_*evp 2 sorting objective-c ios

我有三个数组,priceArray,nameArray和discountArray.我在tableView中显示这些数组值.每个单元格都有价格,名称,折扣.

我想通过Price Low to High对列表进行排序,反之亦然,nameArray和discountArray中的项目需要根据价格排序进行排序.

同样,我希望按名称从AZ排序,反之亦然,并相应地对价格和折扣进行排序.

1 cell -- 20,xxx,10%
2 cell -- 10,zzz,10%
3 cell -- 150,aaa,0%
4 cell -- 100,hhh,15%

By Price Low to High
   10,zzz,10%
   20,xxx,10%
   100,hhh,15%
   150,aaa,0%

By Name A-Z
   150,aaa,0%
   100,hhh,15%
   20,xxx,10%
   10,zzz,10%
Run Code Online (Sandbox Code Playgroud)

帮我这样排序.

War*_*ton 8

你不能用3个独立的阵列做你想要的.您需要将所有信息收集到模型对象中.

@interface Product:NSObject

@property NSString *name;
@property NSNumber *price;
@property NSNumber *discount;

@end

@implementation Product  
//this is empty 
@end
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用它NSSortDescriptor来排序数组Product.

例如价格从低到高.

NSSortDescriptor *priceSortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"price" ascending:YES];
NSArray *sortedArray = [productArray sortedArrayUsingDescriptors:@[priceSortDescriptor]];
Run Code Online (Sandbox Code Playgroud)

将ascending:参数更改NO为从高到低排序.将key:参数更改为@"name"按名称排序.

编辑

要创建模型对象数组,只需创建对象并用数据填充它.

Product *product = [Product alloc] init];
product.name = @"Widget";
product.price = @(3.65);
product.discount = @(.1);
Run Code Online (Sandbox Code Playgroud)

所以Widget价格为3.65美元,折扣10%

然后将其添加到可变数组中.

NSMutableArray *productArray = [NSMutableArray array]; //create array only once 
for(thing in inboundInformation) {
    Product *product = //make and populate new product 
    [productArray addObject:product];
}
Run Code Online (Sandbox Code Playgroud)

通常,您可以循环入站信息,例如JSON,并为每个创建一个对象Product,并将该对象添加到您的数组中进行演示.