NSArray API 学习

本文介绍了Objective-C中数组的高级操作方法,包括排序、并行执行选择器及数组与字符串的转换等。详细展示了如何使用不同的排序方法和描述符来满足特定需求,如通过对象属性排序或使用自定义比较器。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主要介绍几个非常酷的方法:

1.  排序

-  (NSArray*)sortedArrayUsingSelector:(SEL)aSelector; 

数组排序,返回排好序的新数组。

- (NSArray *)sortedArrayUsingComparator:(NSComparator)cmptr

通过块进行数组排序。

- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors

通过排序描述器,构建复杂排序。


code 1:

NSArray *newArray = [array sortedArrayUsingSelector:@selector(compare:)];

code 2:

Book *book1 = [Book name:@"ABC" type:@"jsj"];  
Book *book2 = [Book name:@"234" type:@"sx"];    
NSArray *array = [NSArray arrayWithObjects:book1,book2, nil];  
NSArray *array2 = [array sortedArrayUsingSelector:@selector(compareBook:)];   

/// Book class 里实现的比较方法
- (NSComparisonResult)compareBook:(Book *)book {  
    NSComparisonResult result = [self.type compare:book.type];  
    // 类型相同,比较名字 
    if (result == NSOrderedSame) {  
        result = [self.name compare:book.name];  
    }  
    return result;  


code 3:

NSArray *new2 = [new sortedArrayUsingComparator:^NSComparisonResult(NSString *str1, NSString *str2){
        return [str1 compare:str2];
    }];

code 4:

    // 1.按姓排序  
    NSSortDescriptor *lastnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"lastname" ascending:YES];  
    // 2.再按名排序  
    NSSortDescriptor *firstnameDesc = [NSSortDescriptor sortDescriptorWithKey:@"firstname" ascending:YES];  
    NSArray *descs = [NSArray arrayWithObjects:lastnameDesc, firstnameDesc, nil nil];  
    NSArray *newArray3 = [array sortedArrayUsingDescriptors:descs]; 


2. 

- (void)makeObjectsPerformSelector:(SEL)aSelector;
- (void)makeObjectsPerformSelector:(SEL)aSelector withObject:(nullable id)argument;

效率高于for循环,类似于NSNotifation机制,并发执行,数组中每个元素执行aSelector中方法。


3. 
- (NSString *)componentsJoinedByString:(NSString *)separator;

将数组转换成字符串;

- (NSArray*)componentsSeparatedByString:(NSString*)separator;

将字符串转换成数组;

code:

 NSArray  *array = [strName componentsSeparatedByString:@","];

 NSString *strings = [nameArray componentsJoinedByString:@","];



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值