自学iOS开发系列----OC(数组)

C里面的数组,元素类型是相同的;OC里面的数组,元素的类型可以是多种混杂,并且可以是对象。

一、不可变数组
1.数组的遍历
①for循环

NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
for (int i = 0; i < [array count]; i++) {
    NSString * str = array[i];
    NSLog(@"for循环遍历数组 = %@",str);
}

②for…in…循环

NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
for (NSString * str in array) {
    NSLog(@"for…in循环遍历数组 = %@",str);
}

③基于block进行遍历
1)正序遍历

NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array enumerateObjectsUsingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSString * str = array[idx];
    NSLog(@"block正序循环遍历数组 = %@",str);
}];

2)倒序遍历

NSArray * array = [[NSArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:^(id  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {
    NSString * str = array[idx];
    NSLog(@"block倒序循环遍历数组 = %@",str);
}];

④枚举遍历(id表示任意对象)

NSEnumerator *enumerator = [array objectEnumerator];
id obj;
int i = 0;
while (obj = [enumerator nextObject]) {
    i++;
    NSString * str = array[i];
    NSLog(@"枚举遍历数组 = %@",str);
}

2.数组的创建
①字面量语法

NSArray * array = @[@"hello",@"like",@"love"];

②实例化方法

NSArray * array = [[NSArray alloc] initWithObjects:@"hello",@"like",@"love",nil];

③类方法


NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];

3.获取数组元素个数

NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSLog(@"%lu",[array count]);

4.通过索引获取相应的元素(索引下标从0开始计数)

NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSString * str1 = [array objectAtIndex:2];
NSString * str2 = array[2];
NSLog(@"str1 = %@,str2 = %@",str1,str2);

5.通过对象地址获取在数组中的索引

NSArray * array = [NSArray arrayWithObjects:@"hello",@"like",@"love",nil];
NSUInteger index = [arrayGod indexOfObject:@"love"];
NSLog(@"love在数组中的位置是",index);

6.判断数组中数组包含元素anObject

NSArray * array = @[@"hello",@"like",@"love",@"world"];
BOOL tag = [array containsObject:@"like"];
NSLog(@"如果是1则包含,如果是0则不包含:%d",tag);

7.获取数组的最后一个元素/第一个元素

NSArray * array = @[@"hello",@"like",@"love",@"world"];
NSString * firstObj = [array firstObject];
NSString * lastObj = [array lastObject];
NSLog(@"第一个元素是:%@ 最后一个元素是:%@",firstObj,lastObj);

8.把数组元素内容按照字符串separator进行拼接

NSArray * array = @[@"hello",@"like",@"love",@"world"];
//以后用在给服务器传数据
NSString * joinStr = [array componentsJoinedByString:@"iOS "];
NSLog(@"拼接后的字符串%@",joinStr);

9.字符串分割

NSString * str = @"My+name-is*God/";
NSCharacterSet * charSet = [NSCharacterSet characterSetWithCharactersInString:@"+-*/n"];
NSArray * arrayStr = [str componentsSeparatedByCharactersInSet:charSet];
NSLog(@"字符串进行分割后的数组为%@",arrayStr);

二、可变数组
1.创建可变数组
①实例方法

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];

②用一个数组初始化一个可变数组

NSArray * arr = @[@"new",@"old"];
NSMutableArray * mutalbeArray = [[NSMutableArray alloc] initWithArray:arr];

③类方法

NSArray * arr = @[@"new",@"old"];
NSMutableArray * mutalbeArray = [NSMutableArray arrayWithArray:arr];

2.增加数组元素
①末尾追加元素


NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray addObject:@"e"];

②根据索引插入元素,index后的元素依次往后移一位


NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray insertObject:@"z" atIndex:3];

③追加一个数组

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old"];
[mutableArray addObjectsFromArray:arr];

3.删除元素
①删除最后一个元素

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeLastObject];

②删除指定坐标的元素

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeObjectAtIndex:3];

③删除所有元素 清空数组

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeAllObjects];

④在一定范围删除指定的元素,在此范围内 如果存在这个元素,则删除,否则不作处理

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSRange range = {0,3};
[mutableArray removeObject:@"1" inRange:range];

⑤删除指定的元素

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray removeObject:@"e"];

⑥根据一个数组删除指定的元素,arr(参数),里面有什么 ,在array 中都需要删除

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old",@"d"];
[mutableArray removeObjectsInArray:arr];

4.修改数组
①重新赋值

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
NSArray * arr = @[@"new",@"old"];
[mutableArray setArray:arr]; 

②替换指定索引的元素

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[mutableArray replaceObjectAtIndex:2 withObject:@"cc"];

③交换数组元素

NSMutableArray * mutableArray = [[NSMutableArray alloc] initWithObjects:@"a",@"b",@"c",@"d", nil];
[array exchangeObjectAtIndex:1 withObjectAtIndex:2];

5.数组排序:仅介绍两种常见算法
①选择排序法

NSArray * arrayNum = @[@"1",@"4",@"6",@"5",@"2",@"3"];  
NSMutableArray * arraySort = [[NSMutableArray alloc] initWithArray:arrayNum];


for (int i = 0; i < [arraySort count] - 1; i++) {
    for (int j = i + 1; j < [arraySort count]; j++) {
        NSString * str1 = [arraySort objectAtIndex:i];
        NSString * str2 = arraySort[j];

        int num1 = [str1 intValue];
        int num2 = [str2 intValue];

        if (num1 > num2) {
            //交换
            [arraySort exchangeObjectAtIndex:i withObjectAtIndex:j];
        }              
    }
}

②冒泡排序法

NSMutableArray * arrayStr = [[NSMutableArray alloc] initWithObjects:@"HanMeiMei",@"LiLei",@"Lucy",@"Lili",@"Mike",@"Alex", nil];

for (int i = 0; i < [arrayStr count] - 1; i++) {
    for (int j = 0; j < [arrayStr count] - i - 1; j++) {
        NSString * str1 = [arrayStr objectAtIndex:j];
        NSString * str2 = arrayStr[j+1];

        if ([str1 compare:str2] == NSOrderedDescending) {
            [arrayStr exchangeObjectAtIndex:j withObjectAtIndex:j+1];
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值