Foundation框架中的静态数组:NSArray
Posted talk_8
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Foundation框架中的静态数组:NSArray相关的知识,希望对你有一定的参考价值。
看官们,我们在前面章回中介绍了Foundation框架中的字符串,本章回中将介绍Foundation框架中的数组.
数组表示多个对象按照一定的顺序存放在一起的容器,框架中的数组成员必须是对象类型,不过对象的类型可以不一样,这点和C语言中的数组不一样。常用的是静态数组和动态数组,静态数组表示数组中的元素及其顺序不可以被修改,反之可以修改的称为动态数组。
静态数组使用NSArray类来表示,动态数组使用NSMutableArray类来表示。明白数组的概念和分类后,我们介绍与数组相关的操作。
数组初始化
数组初始化表示给数组中各个成员赋值,我们可以使用大括号或者中括号直接给数组成员赋值,这两种初始化方法的不同之处在于中括号前面需要添加@符号,而大括号前面则不需要。这是两种比较常见的初始化方法,还有一种初始化方法是使用NSArray类的arrayWithObjects:方法。该方法会把参数中的各个对象赋值给数组,不过该方法有个要求:参数的最后一个对象必做是nil对象,而且该对象为不会赋值给数组。
获取数组中的元素及其位置
获取数组中的元素有两种方法,一种是使用中括号和数组下标,这点和C语言中的数组一样,需要注意的是数组下标从0开始;另外一种是使用NSArray的objectAtIndex:方法,该方法的参数表示数组中某个元素所在的位置,通过该方法可以把数组中处于该位置的的元素取出来。
NSArray提供了indexOfObject:方法用来获取方法中参数所指元素在数组中的位置,不过前提是该元素在数组中。
查找数组中的某个对象
查找数组中的某个对象时需要使用containsObject:方法,该方法的参数是被查找的对象,该方法返回布尔类型的数值,通过判断该方法的返回值可以知道被查找元素是否在数组中。
遍历数组
遍历数组表示依次输出数组中的所有元素,常用遍历方法有两种,一种是先获取数组的大小,然后通过循环来遍历数组,另外一种是使用枚举的方式来遍历数组,遍历时不需要获取数组大小,这种枚举方式类似Java中的foreach循环(大家可以自行查找,或者如看我在Talkandroid专栏中第五回的介绍),通常情况下该方法使用频率高一些。
NSArray提供了count方法来获取数组的大小,该方法没有参数,可以直接使用,这为我们获取数组大小提供了便利。此外,如果我们只是想查看数组中各个元素的值,那么不需要遍历数组,直接使用NSLog方法就可以输出数组中所有的元素,它其实是利用了数组的description方法,这点我们在介绍NSObject类时介绍过,如果有看官忘记了可以去查看本专栏第二十四回的内容。
#import<Foundation/Foundation.h>
int main()
{
//定义并且初始化数组
id array[] = {@1,@3,@"abc"};
NSArray *days = @[@"one",[NSNumber numberWithInt:2],@123];
NSArray *week = [NSArray arrayWithObjects:@"Mon",@"Tue",@"three",@333,nil];
NSArray *numbers1 = [NSArray arrayWithObjects:[NSNumber numberWithInt:1],[NSNumber numberWithInt:2],nil];
//获取数组的容量
int weekSize = [week count];
int numberSize1 = [numbers1 count];
int numberSize2 = sizeof(array)/sizeof(id); //这个只对id类型的数组有效
NSLog(@"size is %i %i %i",weekSize,numberSize1,numberSize2);
//输出数组对象
NSLog(@"week: %@",week);
// NSLog(@"days: %@",days);
// NSLog(@"numbers1: %@",numbers1);
//输出单个元素
NSLog(@"value of index: %i is %@.",1,week[1]);
NSLog(@"value of index: %i is %@.",1,[week objectAtIndex:1]);
//输出某个元素所在的位置
NSLog(@"%@ is at index: %lu",@"Wed",[week indexOfObject:@"Wed"]);
//静态数组,不可以修改其中的内容
// week[1] = @"hello";
//判断是否包含某个对象
if([week containsObject:@"Mon"]) {
NSLog(@"week contains 'Mon'");
}else {
NSLog(@"week don not contains 'hello'");
}
//遍历数组
for(int i=0; i<weekSize; i++) {
NSLog(@"week[%i] = %@",i,week[i]);
}
//遍历数组
for(NSObject *obj in days) {
NSLog(@" %@",obj);
}
return 0;
}
看官们,上面我们一直在介绍理论方面的知识,接下来我们介绍通过代码演示如何初始化数组以及数组相关的操作。下面是具体的代码:
在代码中我们添加了相关的注释,以方便大家理解代码。
下面是程序的运行结果,大家可以结合程序代码一起分析。
2021-07-24 16:45:46.294 ex.out[1224:43749] size is 4 2 3
2021-07-24 16:45:46.295 ex.out[1224:43749] week: (
Mon,
Tue,
three,
333
)
2021-07-24 16:45:46.295 ex.out[1224:43749] value of index: 1 is Tue.
2021-07-24 16:45:46.295 ex.out[1224:43749] value of index: 1 is Tue.
2021-07-24 16:45:46.295 ex.out[1224:43749] Wed is at index: 9223372036854775807
2021-07-24 16:45:46.295 ex.out[1224:43749] week contains 'Mon'
2021-07-24 16:45:46.295 ex.out[1224:43749] week[0] = Mon
2021-07-24 16:45:46.295 ex.out[1224:43749] week[1] = Tue
2021-07-24 16:45:46.295 ex.out[1224:43749] week[2] = three
2021-07-24 16:45:46.295 ex.out[1224:43749] week[3] = 333
2021-07-24 16:45:46.295 ex.out[1224:43749] one
2021-07-24 16:45:46.295 ex.out[1224:43749] 2
2021-07-24 16:45:46.295 ex.out[1224:43749] 123
最后我们对本章回的内容做统一的总结:
- 1.数组是存放多个对象的集合,数组中的元素必须是对象,对象的类型可以不一样;
- 2.数组数组化有三种方法:使用大括号、中括号和arrayWithObjects方法;
- 3.获取数组中的元素可以使用数组下标或者objectAtIndex方法;
- 4.获取数组中的元素的位置可以使用indexOfObject方法:
- 5.查找数组中的某个对象使用containsObject方法;
- 7.遍历数组可以通过循环来实现,有两种循环方法;
看官们,本章回中关于静态数组的内容就介绍到这里,下一回中将介绍动态数组的内容,欲知后事如何且听下回分解!
以上是关于Foundation框架中的静态数组:NSArray的主要内容,如果未能解决你的问题,请参考以下文章