在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
OC数组NSArray
对比 c数组 和 oc数组对象(指针) 定义 int array[10]; NSArray *array; 特点: 元素类型必须相同, 元素可以是任意对象 而且只能c的数据类型 但是不能是c的数据类型 字面常量: (数组类型){1,2,3}能 @[@"one",@"two"] 表达一个数组常量 访问元素: array[i] ? ********************************************** //oc数组对象的构造方法 // NSArray * arr1 = [[ NSArray alloc]init]; //这种构造无意义 NSArray * arr1 = [[ NSArray alloc]initWithObjects:@"one",@"two",@"three", nil]; NSLog(@"arr1: %@ 地址:%p",arr1,arr1);
NSArray * arr2 = [[ NSArray alloc]initWithArray:arr1]; NSLog(@"arr2: %@ 地址:%p",arr2,arr2);
#define ARRAY1 @[@"one",@"two",@"three"] // NSArray * arr3 = @[@"one",@"two",@"four"]; NSArray * arr3 = ARRAY1; //ARRAY1放在某一个常量区地址 NSLog(@"arr3: %@",arr3);
NSArray * arr4 = ARRAY1; //ARRAY1放在了另一个常量区的地址 NSLog(@"arr3:%p, arr4:%p",arr3,arr4); // 地址不同!! ********************************************** // 类方法 NSArray * arr1= [NSArray arrayWithObjects:@"one",@"two", nil]; NSArray * arr2 =[NSArray arrayWithArray:arr1]; NSArray *array = @[@"123",@"456",@"789",@"abc",@"def"]; ********************************************** //将数组里的所有字符串对象拼接成一个字符串对象并返回 NSArray * array = @[@"there",@"is",@"a",@"girl" ]; NSString * result = [array componentsJoinedByString:nil];
NSLog(@"result: %@ 长度为:%lu", result, [result length]); ********************************************** //分割字符串,需要用到一个分割符字符串, 分割后的结果放在数组里 NSString * str = @"there is a beautiful girl in my heart,but she is not my wife"; NSArray * array = [str componentsSeparatedByString:@" "]; NSLog(@"array: %@", array); // 这样的话,heart,but就变成一个单词了,与我们的意图相悖 所以: NSCharacterSet *setSeparate = [NSCharacterSet characterSetWithCharactersInString:@", "];// 注意:@", "字符串包括一个@","和一个@" "!这和c中的拆分字符串方法很类似,可以添加多个拆分字符 NSArray * aha = [str componentsSeparatedByCharactersInSet:setSeparate];
注意:当拆分字符或字符串在被拆分字符串中联系出现时,拆分后放到数组里的对象就会 有一个@"",空对象! 打印或者计数方法都会受影响,解决办法: [aha removeObject:@""];// 移除所有在数组中的@""对象 ********************************************** //在一个数组中查询某一个对象是否存在 NSArray * array = @[@"one",@"two",@"three",@"four",@"two"];
if ([array containsObject:@"one"]==YES) { NSLog(@"one在数组中存在"); // 如果one在数组中存在,那么它肯定有一个下标, NSUInteger index = [array indexOfObject:@"one"]; NSLog(@"one的下标为: %lu", index); } else { NSLog(@"one在数组中不存在"); } //获取一个对象在数组中的下标,如果对象在数组中不存在,则返回NSNotFound if( [array indexOfObject:@"jobs"] == NSNotFound ) NSLog(@"jobs 在数组中不存在"); ********************************************** // 访问元素 NSArray * arr1 = @[@"one",@"two",@"three"]; //用下标运算符访问某个元素 NSLog(@"arr[1] is %@", arr1[1]);
//调方法访问某个元素 NSLog(@"objectAtIndex:1 == %@", [arr1 objectAtIndex:1]);
//获取元素数量 NSLog(@"arr1的元素个数为: %lu", [arr1 count]);
//遍历数组对象 //1, 用循环和下标运算符遍历 NSUInteger i; for (i=0; i<[arr1 count]; i++) { NSLog(@"arr[%lu]=%@", i,arr1[i]); } //2, 用循环和方法objectAtIndex: 完成遍历 for (i=0; i<[arr1 count]; i++) { NSLog(@"[arr1 objectAtIndex:%lu] == %@", (unsigned long)i, [arr1 objectAtIndex:i]); }
//3, 快速枚举法 for( id obj in arr1) // for(int i=0;i<10;i++) { NSLog(@"快速枚举法:obj=[%@]",obj); } //4,枚举器法, 首先认识一种枚举器对象 // 枚举器对象 这个方法是获取一个数组的枚举器 // 正序枚举器 NSEnumerator * enumerator =[arr1 objectEnumerator]; id obj; while (obj = [enumerator nextObject]) { NSLog(@"正序枚举器法遍历: obj == %@", obj); } // 逆序枚举器 NSEnumerator *enumerator2 = [arr1 reverseObjectEnumerator];
while (obj = [enumerator2 nextObject]) { NSLog(@"逆序枚举器法遍历: obj == %@", obj); } ********************************************** //数组排序 // 要回调的函数 NSInteger compareTwoObjects(id obj1, id obj2, void * args) { // struct student * stu = args; // printf("args:%s\n",args); //1,比较字符串大小 // return [obj1 compare:obj2];
//2, 比较字符串的长度 return [obj1 length]-[obj2 length];
//3, 将字符串转成整型,再比较整型的大小 // return [obj1 integerValue]-[obj2 integerValue]; }
NSArray *array = [[ NSArray alloc]initWithObjects:@"123",@"4567",@"34",@"111", @"x",nil]; // 对数组的元素进行排序: 传进来的是一个回调函数,用于处理比较细节 NSArray * newArray = [array sortedArrayUsingFunction: compareTwoObjects context:"testString"];
********************************************** 数组排序方法sortedArrayUsingFunction:context:在官方文档里有很详细的介绍,并且有相关例子可供参考 ********************************************** |
请发表评论