Objective-C的集合都是Cocoa 或者Cocoa Touch类。
NSArray
可以存储不同类型的对象,从零开始标号,有序数组。
1. 新建
构造方法[NSArray arrayWithObjects:someObject, someString, someNumber,……,nil]
主要注意,最后要添加一个nil
表示结束
使用字面量的话,不需要加nil
NSArray *someArray = @[firstObject, secondObject, thirdObject];
如果确实要在集合中存储一个nil
,用NSNULL
的对象来表示,其初始化方法就是
[NSNull null]
,相当于Java中的null
。
2. 访问
对象方法count返回集合中的元素个数
对象方法containsObject:someString
可以查是否含有某字符串
像C语言数组一样的下标也可以用:比如有NSArray *something
,可以有something[5]
。
其他方法见文档
3. 排序
对象方法(1)
- (NSArray *)sortedArrayUsingSelector:(SEL)comparator;
例子
NSArray *unsortedStrings = @[@"gammaString", @"alphaString", @"betaString"];
NSArray *sortedStrings = [unsortedStrings sortedArrayUsingSelector:@selector(compare:)];
解释
这里也可以看到,NSArray
也是不可变的,排序不能在原数组上进行,只能产生一个新的数组。就算是使用NSMutableArray
也是一样的,因为它并没有重写其父类NSArray
中的排序方法,在使用时调用的始终是其父类NSArray
的排序方法。
这个方法可以让数组中的每个对象调用compare:
方法,而方法的参数就是下一个对象,也就是说,这个compare:
方法是实现了当前对象和下一个对象的比较,由此可以猜测这个排序方法的逻辑思路有可能就是冒泡排序法。这里@selector(someFunction:)
会在数组元素的类定义中寻找方法someFunction
,并且返回该方法的id(以上例子中,NSString
类就实现了compare:
方法&#x