iOS 对NSMutableArray进行排序和过滤

标签: iOS
888人阅读 评论(0) 收藏 举报
分类:

根据实体类的属性进行排序,这个属性排序还可以增加几个排序规则,前后的规则先判断,如果一样的则根据第二个排序规则来判断

    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"data" ascending:YES];//其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
    [self.dataArray sortUsingDescriptors:sortDescriptors];
    
过滤不会对原来的数据产生影响,而是生成符合过滤条件的NSArray数据

    NSPredicate *apredicate=[NSPredicate predicateWithFormat:@"id>=%ld AND id<=%ld",3,5];
    
    NSArray *newArr=[self.dataArray filteredArrayUsingPredicate:apredicate];

下面是个例子可以运行看看

#import <Foundation/Foundation.h>

@interface TestBean : NSObject
@property(nonatomic,assign)int id;
@property(nonatomic,strong)NSString* data;
@end
#import <UIKit/UIKit.h>

@interface ViewController : UIViewController<UITableViewDelegate,UITableViewDataSource>

@property (strong, nonatomic) NSArray
*list;



@end


//
//  ViewController.m
//  First
//
//  Created by shanreal-iOS on 17/10/16.
//  Copyright © 2017年 shanreal.LongZhenHao. All rights reserved.
//

#import "ViewController.h"
#import "TestBean.h"
@interface ViewController ()

@property(nonatomic,strong)NSMutableArray* dataArray;

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    // Do any additional setup after loading the view.

    _dataArray = [NSMutableArray array];
    
    TestBean* one = [[TestBean alloc]init];
    one.id = 1;
    one.data = @"one";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 2;
    one.data = @"two";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 22;
    one.data = @"two2";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 3;
    one.data = @"three";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 4;
    one.data = @"four";
    [_dataArray addObject:one];
    
    
    
    one = [[TestBean alloc]init];
    one.id = 44;
    one.data = @"four4";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 5;
    one.data = @"five";
    [_dataArray addObject:one];
    
    one = [[TestBean alloc]init];
    one.id = 6;
    one.data = @"six";
    [_dataArray addObject:one];
    
    [self oneClick];
    [self twoClick];
    
}

-(void)oneClick{
    NSSortDescriptor *sortDescriptor = [[NSSortDescriptor alloc] initWithKey:@"data" ascending:YES];//其中,price为数组中的对象的属性,这个针对数组中存放对象比较更简洁方便
    NSArray *sortDescriptors = [[NSArray alloc] initWithObjects:&sortDescriptor count:1];
    [self.dataArray sortUsingDescriptors:sortDescriptors];
    
    [self logArray:self.dataArray];
}

-(void)twoClick{
    NSPredicate *apredicate=[NSPredicate predicateWithFormat:@"id>=%ld AND id<=%ld",3,5];
    
    NSArray *newArr=[self.dataArray filteredArrayUsingPredicate:apredicate];
    [self logArray:newArr];
}

-(void)logArray:(NSArray*)array{
    NSLog(@"---------------------------------");
    for(TestBean* bean in array){
        NSLog(@"%d %@",bean.id,bean.data);
    }
}


@end




查看评论

IOS学习 NSMutableArray内部元素的排序

1函数介绍与实例    函数一: - (void)sortUsingSelector:(SEL)comparator; 适用于数组中的元素自带比较函数时; 数组排序函数,调用该函数...
  • qw25767889
  • qw25767889
  • 2015-05-22 16:27:51
  • 787

IOS学习 NSMutableArray中元素排序

首先(效率同于冒泡):    int comparecCount = 0;     NSMutableArray *array = [[NSMutableArrayalloc]initWithObj...
  • qw25767889
  • qw25767889
  • 2016-02-29 14:09:57
  • 1675

NSMutableArray中各种自定义排序方法

NSMutableArray中各种自定义排序方法 /*  (1)sortedArrayUsingComparator调用NScomparator方法  */ FirstMeth...
  • Judy_luo
  • Judy_luo
  • 2015-07-20 08:16:28
  • 1730

NSMutableArray复杂对象排序

今天在写程序的时候需要对NSMutableArray中的复杂对象排序,一时不知如何下手,在百度上谷歌后得到以下解决方案: 方案说明 1、   说明:以下程序中N...
  • hong1595
  • hong1595
  • 2015-11-25 13:58:38
  • 597

NSArray/NSMutableArray创建,获取,遍历,排序 - iOS

1 数组基本1.1 创建数组NSArray 是不可变数组,一旦创建完成就不能够对数组进行,添加,删除等操作下面这种方式相当于什么都没做NSArray * array = [[NSArray alloc...
  • zyq522376829
  • zyq522376829
  • 2016-08-14 15:08:09
  • 5032

iOS 对数组中的对象进行排序

1、直接对数组中的对象排序: //对数组进行降序     NSComparator cmptr = ^(id obj1, id obj2){         if ([obj1 integerV...
  • huobanbengkui
  • huobanbengkui
  • 2016-08-09 11:41:05
  • 1470

数组倒序排列

NSMutableArray *array = [[[NSMutableArray alloc] initWithObjects:@"1", @"2", @"3", nil] autorel...
  • xiaoxiangzhu660810
  • xiaoxiangzhu660810
  • 2014-02-28 13:57:52
  • 23776

[并发并行]_[Object-C]_[使用NSMutableArray等非线程安全集合类的注意事项]

场景: 1. 开发Mac,iOS程序时,一般都会涉及到多线程开发, 比如工作线程在更新数据模型, 主线程根据数据模型来显示界面. 比如最常用的NSMutableArray, NSMutableDic...
  • infoworld
  • infoworld
  • 2015-11-12 15:40:46
  • 4026

NSMutableArray的双条件或多条件排序

最近我在研究双条件或多条件排序,当然是有主要条件和次要条件的咯。假设有这么个场景:需要对优惠卷进行双重条件排序,根据优惠卷状态和优惠卷的消费金额进行正序排序,所用代码如下: 优惠卷状态--->优惠卷消...
  • klabcxy36897
  • klabcxy36897
  • 2016-05-18 14:11:27
  • 625
    个人资料
    专栏达人 持之以恒
    等级:
    访问量: 12万+
    积分: 3313
    排名: 1万+
    博客专栏
    最新评论