iOS官方文档 Foundation篇---NSArray(NSMutableArray)

人生在世 总是要不断 创新 挑战 突破 被淘汰算其次 活得刺激 有价值更加重要。

————叹希奇

NSArray

静态有序集合(不可变数组)

#数组创建
NSArray *array = @[@"1",@"2",@"3",@"4",@"5"];
NSArray *array1 = [NSArray array];
NSArray *array2 = [[NSArray alloc]init];
NSArray *array3 = [[NSArray
alloc]initWithObjects:@"b",@"a",@"e",@"c",@"d",@"1",@"2",@"3",@"4",@"5", nil];
NSArray *array4 = [[NSArray alloc]initWithArray:array];
#数组取值
//根据索引取值
NSString *objest = [array objectAtIndex:0];
NSString *objest1 = array[0];//1
//取数组中的第一个对象
NSString *string3 = array.firstObject;//1
//取数组中的最后一个对象    
NSString *string4 = array.lastObject;//5
#数组属性
//长度
NSInteger length = array.count;
    
//添加对象到数组尾部,返回一个新数组
NSArray *array5 = [array arrayByAddingObject:@"6"];//1,2,3,4,5,6

//添加一个数组到数组尾部,返回一个新数组
NSArray *array6 = [array arrayByAddingObjectsFromArray:array1];//1,2,3,4,5

//数组元素之间插入分隔符,返回一个字符串
NSString *string = [array componentsJoinedByString:@"-"];//1-2-3-4-5

//对象是否存在在数组中,返回一个BOOl值
BOOL isConain = [array containsObject:@"1"];//YES

//返回数组内容的字符串
NSString *string1 = array.description;//1,2,3,4,5
NSString *string1 = [array descriptionWithLocale:nil];//1,2,3,4,5

//返回接收数组中包含的第一个对象,该对象等于另一个给定数组中的对象。
NSString *string2 = [array firstObjectCommonWithArray:array3];//1

//返回其对应的数组值等于给定对象的最低索引。
NSUInteger index = [array indexOfObject:@"1"];//0
    
//返回指定范围内的最低索引,其对应的数组值等于给定对象
NSUInteger index1 = [array indexOfObject:@"1" inRange:NSMakeRange(0, array.count)];//0

//返回最低索引,其对应的数组值与给定对象相同。
NSInteger index2 = [array indexOfObjectIdenticalTo:@"1"];//0
    
//返回指定范围内的最低索引,其对应的数组值等于给定对象
NSInteger index3 = [array indexOfObjectIdenticalTo:@"1" inRange:NSMakeRange(0, array.count)];//0
    
//判断两数组是否相同,返回一个BOOL值
BOOL isEqual = [array isEqualToArray:array1];//NO
#数组遍历
//正向遍历数组
NSEnumerator *enumerator = [array objectEnumerator];
NSString *objs;
while (objs = [enumerator nextObject]) {
  NSLog(@"数组正序值开始打印:%@\n",objs);
}
//反向遍历数组
NSEnumerator *reverseEnumerator = [array reverseObjectEnumerator];
NSString *reobjs;
while (reobjs = [reverseEnumerator nextObject]) {
  NSLog(@"数组倒序值开始打印:%@\n", reobjs);
}
#数组排序
//排序方法
NSInteger alphabeticSort(id string1, id string2, void *reverse)
{
    if (*(BOOL *)reverse == YES) {
        return [string2 localizedCaseInsensitiveCompare:string1];
    }
    return [string1 localizedCaseInsensitiveCompare:string2];
}

NSData *data = [array3 sortedArrayHint];
BOOL reverseSort = NO;
NSArray *sortArr = [array3 sortedArrayUsingFunction:alphabeticSort context:&reverseSort];//12345abcde
NSArray *sortArr = [array3 sortedArrayUsingFunction:alphabeticSort context:&reverseSort hint:data];//12345abcde
    
//自定义排序方法
NSArray *sortAr1 = [array3 sortedArrayUsingSelector:@selector(compare:)];//12345abcde

//排序
NSArray *sortArr1 = [array3 sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
  return [obj1 compare:obj2];
}];//12345abcde
    
//排序
/*
SSortOptions:
     NSSortConcurrent    高效的但不稳定的排序算法
     NSSortStable        稳定的排序算法
*/
NSArray *sortArr2 = [array3 sortedArrayWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
  return [obj1 compare:obj2];
}];//12345abcde
#数组遍历
//普通遍历
for (NSInteger i = 0; i < array.count; i++) {
  NSString *str = array[i];
}

//快速遍历
for (NSString *str in array) {
  NSLog(@"%@", str);
}

//枚举遍历
[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  NSLog(@"%@",obj);        
}];

/*
NSEnumerationOptions
    NSEnumerationConcurrent   //无序遍历
    NSEnumerationReverse      //倒序遍历
 */
//根据遍历选项遍历
[array enumerateObjectsWithOptions:NSEnumerationConcurrent usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  NSLog(@"%@",obj);
}];

//根据索引和遍历选项遍历数组
NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0,2)];
[array enumerateObjectsAtIndexes:set options:NSEnumerationConcurrent usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
  NSLog(@"%@",obj);
}];

NSMutableArray

可变数组,继承自NSArray

#可变数组创建
NSArray *array = @[@"1",@"2",@"3",@"4",@"5"];//1,2,3,4,5
NSMutableArray *mulArr = [[NSMutableArray alloc]initWithObjects:@"1",@"2", nil];////1,2
NSMutableArray *mulArray = [[NSMutableArray alloc]initWithArray:array];//1,2,3,4,5
#插入元素
//在数组末尾插入给定对象
[mulArr addObject:@"q"];//1,2,q
//在数组末尾插入给定数组的元素
[mulArr addObjectsFromArray:array];//1,2,q,1,2,3,4,5

//在数组中插入元素到指定索引位置
[mulArr insertObject:@"Q" atIndex:0];//Q,1,2,q,1,2,3,4,5
//在数组中插入数组元素到指定索引位置
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, array.count)];
[mulArr insertObjects:array atIndexes: indexSet];//1,2,3,4,5,Q,1,2,q,1,2,3,4,5
#删除元素
//删除数组中具有最高值索引的元素(最后一个元素)
[mulArr removeLastObject];//1,2,3,4,5,Q,1,2,q,1,2,3,4

//删除指定下标的元素
[mulArr removeObjectAtIndex:0];//2,3,4,5,Q,1,2,q,1,2,3,4

//删除给定数组中的元素
[mulArr removeObjectsInArray:array];//Q,q

//删除指定范围内的所有匹配的元素
[mulArray removeObject:@"1" inRange:NSMakeRange(0, 3)];//,2,3,4,5

//删除数组中所有匹配的元素
[mulArray removeObject:@"2"];//3,4,5

//删除数组中所有出现的给定对象。
[mulArray removeObjectIdenticalTo:@"q"];//3,4,5

//删除数组中指定范围内的所有匹配元素
[mulArray removeObjectIdenticalTo:@"5" inRange:NSMakeRange(0, mulArray.count)];//3,4

////删除数组中指定范围内的元素
[mulArray removeObjectsInRange:NSMakeRange(0, 1)];//4

NSIndexSet *set = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, 1)];//nil
//从数组中删除指定索引处的对象
[mulArray removeObjectsAtIndexes:set];//nil

//删除数组中所有的元素
[mulArray removeAllObjects];
#replace
//替换元素
[mulArray setArray:array];//1,2,3,4,5
//替换数组中指定索引处的元素
[mulArray replaceObjectAtIndex:0 withObject:@"Q"];//Q,2,3,4,5

//将给定范围指定的接收数组中的对象替换为给定数组中的所有对象
[mulArray replaceObjectsInRange:NSMakeRange(0, mulArray.count-1) withObjectsFromArray:array];//1,2,3,4,5,5

//将由一个给定范围指定的接收数组中的对象替换为另一个范围指定的另一个数组中的对象。
[mulArray replaceObjectsInRange:NSMakeRange(0, mulArray.count-1) withObjectsFromArray:array range:NSMakeRange(0, array.count-1)];//1,2,3,4,5

//将接收数组中的对象替换为使用给定数组中的对象指定的位置。
NSIndexSet *indexSet = [NSIndexSet indexSetWithIndexesInRange:NSMakeRange(0, array.count)];
[mulArray replaceObjectsAtIndexes: indexSet withObjects:array];//1,2,3,4,5

//将接收数组的元素设置为另一个给定数组中的元素
[mulArray setArray:array];//1,2,3,4,5

//用新对象替换索引处的对象,可能添加对象
[mulArray setObject:@"1" atIndexedSubscript:0];//1,2,3,4,5
#exchange index
//交换数组中指定索引位置的元素
[mulArray setArray:array];//1,2,3,4,5
[mulArray exchangeObjectAtIndex:0 withObjectAtIndex:mulArray.count];//5,2,3,4,1
#排序
[mulArr sortUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
  return [obj1 compare:obj2];
}];
/*
SSortOptions:
    NSSortConcurrent    高效的但不稳定的排序算法
    NSSortStable        稳定的排序算法
*/
[mulArr sortWithOptions:NSSortConcurrent usingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
  return [obj1 compare:obj2];
}];

欢迎留言指正,会持续更新!!!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Swift1> Swift和OC的区别1.1> Swift没有地址/指针的概念1.2> 泛型1.3> 类型严谨 对...
    cosWriter阅读 13,902评论 1 32
  • 站在前辈的肩膀上前行 UIKit框架和Foundation框架 所有的Mac OS X和IOS程序都是由大量的对象...
    zysmoon阅读 12,827评论 0 16
  • 关于键值编码 键值编码(KVC)是一种由NSKeyValueCoding非正式协议提供的机制,对象采用该机制来提供...
    渐z阅读 4,685评论 0 0
  • 从2月份起,我们约定每月给孩子固定的零花钱,约定好钱的用途,平时由孩子自己支配,每笔登账。月末多扣少奖。由...
    雪儿_7d5f阅读 1,724评论 2 1
  • 今天早上我早早起来了,因为有晨读。奶奶六点半就过来了,吃完早饭我和奶奶赶紧去学校。结果,今天下雨了,老师说...
    郝丽君_67b1阅读 1,328评论 0 0

友情链接更多精彩内容