iOS 数组(可变数组、不可变数组、数组倒序、数组中添加元素、数组元素替换、数组移除某个元素等)

闲话少说,先上Demo

Github地址:https://github.com/Jerryisme/ArrayUsage

NSArray官方API文档

NSMutableArray官方API文档

常用方法

不可变数组

- (void)setUpNSArray {
    // 创建空数组(基本没用过)
    NSArray *arr0 = [[NSArray alloc] init];
    NSLog(@"创建空数组---    %@\n", arr0);
    
    // 类方法创建空数组(常用)
    NSArray *arr1 = [NSArray array];
    NSLog(@"类方法创建空数组---    %@\n", arr1);
    
    // 对象方法创建数组,以nil结束
    NSArray *arr2 = [[NSArray alloc] initWithObjects:@"I", @"Love", @"U", nil];
    NSLog(@"对象方法创建数组,以nil结束---    %@\n", arr2);
    
    // 用已有数组创建新数组
    NSArray *arr3 = [[NSArray alloc] initWithArray:arr2];
    NSLog(@"用已有数组创建新数组---    %@\n", arr3);
    
    // 通过类方法创建数组
    NSArray *arr4 = [NSArray arrayWithArray:arr3];
    NSLog(@"通过类方法创建数组---    %@\n", arr4);
    
    // 数组中有多少个元素
    NSLog(@"数组中有多少个元素---    %ld\n", arr2.count);
    
#pragma mark - 不可变数组方法
    // 取一个元素
    NSString *str0 = [arr2 objectAtIndex:1];
    NSLog(@"取一个元素---    %@\n", str0);
    
    // 取一个元素(简写)
    NSString *str1 = arr2[0];
    NSLog(@"取一个元素(简写)---    %@\n", str1);
    
    // 取第一个元素
    NSString *str2 = [arr2 firstObject];
    NSLog(@"取第一个元素---    %@\n", str2);
    
    // 取最后一个元素
    NSString *str3 = [arr2 lastObject];
    NSLog(@"取最后一个元素---    %@\n", str3);
    
    // 截取多个元素
    // NSIndexSet:索引集合,与数组类似,无序
    NSIndexSet *set = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 2)];
    NSArray *arr5 = [arr2 objectsAtIndexes:set];
    NSLog(@"截取多个元素---    %@\n", arr5);
    
    // 截取多个元素()
    NSArray *arr6 = [arr2 subarrayWithRange:NSMakeRange(1, 2)];
    NSLog(@"截取多个元素()---    %@\n", arr6);
}

可变数组

#pragma mark - 可变数组
- (void)setUpNSMutableArray {
    NSMutableArray *mutableArr0 = [NSMutableArray array];
    NSLog(@"mutableArr0---    %@\n", mutableArr0);
    
    NSMutableArray *mutableArr1 = [NSMutableArray arrayWithObjects:@"I", @"Love", @"U", nil];
    NSLog(@"mutableArr1---    %@\n", mutableArr1);
    
    NSMutableArray *mutableArr2 = [[NSMutableArray alloc] initWithArray:@[@"I", @"Like", @"U"]];
    NSLog(@"mutableArr2---    %@\n", mutableArr2);
    
    NSMutableArray *mutableArr3 = [NSMutableArray arrayWithArray:mutableArr1];
    NSLog(@"mutableArr3---    %@\n", mutableArr3);
    
    //  初始化可变数组对象的长度,如果后面代码继续添加数组超过长度以后长度会自动扩充
    NSMutableArray *mutableArr4 = [NSMutableArray arrayWithCapacity:100];
    NSLog(@"mutableArr4---    %@\n", mutableArr4);
    
    // 需要自己release
    NSMutableArray *mutableArr5 = [[NSMutableArray alloc] initWithCapacity:100];
    NSLog(@"mutableArr5---    %@\n", mutableArr5);
    
#pragma mark - 增删改
    // 添加单个元素
    [mutableArr1 addObject:@"Forver"];
    NSLog(@"添加单个元素mutableArr1---    %@\n", mutableArr1);
    
    // 指定下标添加元素
    [mutableArr1 insertObject:@"TT" atIndex:0];
    NSLog(@"指定下标添加元素mutableArr1---    %@\n", mutableArr1);
    
    // 添加其他数组元素
    [mutableArr1 addObjectsFromArray:@[@"!", @"Do you Love me"]];
    NSLog(@"添加其他数组元素mutableArr1---    %@\n", mutableArr1);
    
    // 替换数组中的元素
    [mutableArr1 replaceObjectAtIndex:0 withObject:@"TWY"];
    NSLog(@"替换数组中的元素mutableArr1---    %@\n", mutableArr1);
    
    // 替换数组中某个范围(索引集合)的元素
    [mutableArr1 replaceObjectsAtIndexes:[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(5, 2)] withObjects:@[@"Do you", @"love me"]];
    NSLog(@"替换数组中某个范围(索引集合)的元素mutableArr1---    %@\n", mutableArr1);
    
    // 取其他数组中的元素到当前数组(数组元素和替换元素个数必须相等)
    [mutableArr1 replaceObjectsInRange:NSMakeRange(5, 2) withObjectsFromArray:@[@"Can you", @"love me ?"]];
    NSLog(@"取其他数组中的元素到当前数组(数组元素和替换元素个数必须相等)mutableArr1---    %@\n", mutableArr1);
    
    // 取其他数组中的部分元素到当前数组(取出元素和替换元素个数必须相等)
    [mutableArr1 replaceObjectsInRange:NSMakeRange(5, 2) withObjectsFromArray:@[@"aa", @"aaa", @"Do you", @"love me ?", @"en heng"] range:NSMakeRange(2, 2)];
    NSLog(@"取其他数组中的部分元素到当前数组(取出元素和替换元素个数必须相等)mutableArr1---    %@\n", mutableArr1);
    
    // 交换数组中元素位置
    [mutableArr1 exchangeObjectAtIndex:0 withObjectAtIndex:4];
    NSLog(@"交换数组中元素位置mutableArr1---    %@\n", mutableArr1);
    
    // 删除某个元素(数组中含有多个相同元素,会全部删除)
    [mutableArr1 removeObject:@"Love"];
    NSLog(@"删除某个元素(数组中含有多个相同元素,会全部删除)mutableArr1---    %@\n", mutableArr1);
    
    // 删除最后一个元素
    [mutableArr1 removeLastObject];
    NSLog(@"删除最后一个元素mutableArr1---    %@\n", mutableArr1);
    
    // 删除指定下标元素
    [mutableArr1 removeObjectAtIndex:0];
    NSLog(@"删除某下标元素mutableArr1---    %@\n", mutableArr1);
    
    // 删除范围元素
    [mutableArr1 removeObjectsAtIndexes:[[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 2)]];
    NSLog(@"删除范围元素mutableArr1---    %@\n", mutableArr1);
    
    // 全部删除
    [mutableArr1 removeAllObjects];
    NSLog(@"全部删除mutableArr1---    %@\n", mutableArr1);
    
#pragma mark - 倒序
    NSMutableArray *temp = [NSMutableArray arrayWithObjects:@"1", @"2", @"3", @"4", nil];
    temp = (NSMutableArray *)[[temp reverseObjectEnumerator] allObjects];
    NSLog(@"倒序---    %@\n", temp);
    
#pragma mark - 升序/降序(https://my.oschina.net/pengloo53/blog/173810)
    //通过自带的compare方法升序排列
    NSMutableArray *array = [[NSMutableArray alloc] initWithObjects:@"377", @"27", @"1", @"4777", nil];
    [array sortUsingSelector:@selector(compare:)];
    NSLog(@"升序---    %@\n", array);
    //通过倒序的方法进行降序排列
    NSEnumerator *enumerator = [array reverseObjectEnumerator];
    array = [[NSMutableArray alloc] initWithArray:[enumerator allObjects]];
    NSLog(@"降序---    %@\n", array);
    
#pragma mark - for in 遍历数组
    //for in 遍历数组  数组中使用时,in的前面是数组中的元素,in后面是要遍历的集合
    for (NSString *str in array) {
        NSLog(@"遍历数组---    %@\n", str);
    }
    
    // 分隔字符串成数组
    [self componentsString];
    // 数组拼接成字符串
    [self arrayToString];
}

#pragma mark - 分隔字符串成数组
- (void)componentsString {
    NSString *str = @"Hello World and I Love You";
    // 以空格分隔字符串成数组
    NSArray *arr = [str componentsSeparatedByString:@" "];
    NSLog(@"arr---  %@,arr.count--- %lu\n",arr,(unsigned long)arr.count);
}

#pragma mark - 数组拼接成字符串
- (void)arrayToString {
    NSArray *array = [NSArray arrayWithObjects:@"I", @"LOVE", @"U", nil];
    // 用空格隔开数组中的元素
    NSString *str = [array componentsJoinedByString:@" "];
    NSLog(@"str---  %@\n",str);
}

最后,觉得有用记得给个喜欢❤️!非常感谢!

简书个人主页:https://www.jianshu.com/u/281c41cc90bc
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 212,222评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 90,455评论 3 385
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 157,720评论 0 348
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,568评论 1 284
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,696评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,879评论 1 290
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,028评论 3 409
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,773评论 0 268
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,220评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,550评论 2 327
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,697评论 1 341
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,360评论 4 332
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,002评论 3 315
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,782评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,010评论 1 266
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,433评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,587评论 2 350