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.遍历数组可以通过循环来实现,有两种循环方法;


看官们,本章回中关于静态数组的内容就介绍到这里,下一回中将介绍动态数组的内容,欲知后事如何且听下回分解!

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

talk_8

真诚赞赏,手有余香

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值