《Objective-C 编程》17.NSMutableArray

NSMutableArray

推荐阅读

  • iOS实录12:NSMutableArray使用中忽视的问题

  • NSMutableArray 是可变数组,数组中存储空间是可以动态修改,可以添加、删除或对指针重新进行排序。

  • NSMutableArray 继承于 NSArray, NSArray 的方法都可以使用。

数组的创建

Person *p1 = [[Person alloc] init];
Person *p2 = [[Person alloc] init];
Person *p3 = [[Person alloc] init];
 
//1.初始化时添加元素
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithObjects:p1,p2,p3, nil];

//2.创建空数组,再往里面添加
NSMutableArray *mArray2 = [[NSMutableArray alloc] init];
// 类方法
NSMutableArray *mArray21 = [NSMutableArray array];

//3.创建数组时,同时为数组分配3个存储空间,当3个空间全满之后,会自动扩展空间。
NSMutableArray *mArray1 = [[NSMutableArray alloc] initWithCapacity:3];

addObject:添加元素

[mArray1 addObject:p1];

count:取得数组元素个数

NSLog(@"%ld",[mArray1 count]);

将数组 mArray2 中所有元素全部追加到 mArray1 中

[mArray1 addObjectsFromArray:mArray2];

指定位置插入元素

[mArray1 insertObject:@"hello" atIndex:0];

替换元素

[mArray1 replaceObjectAtIndex:0 withObject:@"替换的元素"];

索引0和索引3上的元素调换,可用于排序。

[mArray1 exchangeObjectAtIndex:0 withObjectAtIndex:3];

实例:
获取到的 NSMutableArray 类型的数据需要逆序显示到 UITableView 上,之前用的方法是在索引上动手脚: NSUInteger index = self.dateSourceArray.count - indexPath.row - 1;,缺点是在 tableView:cellForRowAtIndexPath:tableView:didSelectRowAtIndexPath: 都要先获取反向索引值再获取数据。参考 YYKit 的源码中的方法,直接在数据源上做处理:[self.dateSourceArray reverse];

// 反转数组,摘自 YYCategories 
- (void)reverse {
    NSUInteger count = self.count;
    int mid = floor(count / 2.0);
    for (NSUInteger i = 0; i < mid; i++) {
        [self exchangeObjectAtIndex:i withObjectAtIndex:(count - (i + 1))];
    }
}

删除元素

//1>根据下标删除元素
[mArray1 removeObjectAtIndex:0];

//2>删除指定的对象
[mArray1 removeObject:@“hello”];

//3>删除最后一个元素
[mArray1 removeLastObject];

//4>删除所有元素
[mArray1 removeAllObjects];

排序

使用给定的排序描述符数组对接收方进行排序:

- (void)sortUsingDescriptors:(NSArray *)sortDescriptors;

例:

排序前:BMITime[5045:651300] employees: (
"",
"",
"",
"",
""
)

//  先根据 valueOfAssets 属性进行 升序 排序
 NSSortDescriptor *voa = [NSSortDescriptor sortDescriptorWithKey:@"valueOfAssets" ascending:YES];
// 如果某两个对象的 valueOfAssets 属性相同,再根据 employeeID 属性 升序 排序
NSSortDescriptor *eid = [NSSortDescriptor sortDescriptorWithKey:@"employeeID" ascending:YES];
        
[employees sortUsingDescriptors:@[voa,eid]];

结果:

BMITime[5010:648085] employees: (
"",
"",
"",
"",
""
)

你可能感兴趣的:(《Objective-C 编程》17.NSMutableArray)