本文介绍了OC的数组对象的基本方法的使用:
因为OC的数组中存储的为对象类型,所以我们可以新建一个Person类,通过Person生成对象进行操作。
其中Person.h中的代码为:
[objc] view plain copy
#import
@interface Person : NSObject {
NSString *_name; //姓名
NSString *_sex; //性别
NSInteger _age; //年龄
}
- (NSInteger)age;
- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age;
- (void)sayHi;
- (NSComparisonResult)compareByAge:(Person *)per;
//当%@打印时,内部就自动调用该对象的description方法。
//重写父类的description方法
- (NSString *)description;
@end Person.m中实现: [objc] view plain copy
#import "Person.h"
@implementation Person
- (id)initWithName:(NSString *)name sex:(NSString *)sex age:(NSInteger)age {
self = [super init];
if (nil != self) {
_name = name;
_sex = sex;
_age = age;
}
return self;
}
- (NSInteger)age {
return _age;
}
- (void)sayHi {
NSLog(@"name:%@, sex:%@, age:%ld", _name, _sex, _age);
}
- (NSComparisonResult)compareByAge:(Person *)per {
//self拿到当前对象,per拿到另外一个对象
//两个对象比较年龄
if ([self age] < [per age]) {
return NSOrderedAscending; //-1
} else if ([self age] == [per age]) {
return NSOrderedSame; //0
} else {
return NSOrderedDescending; //1
}
}
//当%@打印时,内部就自动调用该对象的description方法。
//重写父类的description方法
- (NSString *)description {
return [NSString stringWithFormat:@"%@, %@, %ld", _name, _sex, _age];
}
@end main.m中的完整代码为: [objc] view plain copy
#import
#import "Person.h"
int main(int argc, const charchar * argv[])
{
@autoreleasepool {
//先创建三个Person对象
Person *per1 = [[Person alloc] initWithName:@"zhangsan" sex:@"man" age:];
Person *per2 = [[Person alloc] initWithName:@"lisi" sex:@"woman" age:];
Person *per3 = [[Person alloc] initWithName:@"wangwu" sex:@"man" age:];
Person *per4;
//创建数组对象,用来存储三个Person对象。
//对于OC中的数组,用来存储多个对象,并且对象的类型可以任意的。
//1.initWithObjects:用来初始化数组的时候一次性存储多个对象,冒号之后填写数组中要存放的对象,也就是数组元素,对象与对象之间通过逗号分隔,最后以nil作为数组元素初始化的结束,也就是说在nil之前有几个对象,数组中就存入几个对象,在nil之后的对象都不会存放到数组中。
//数组是一个有序的结合,也就是先放入数组的对象会在数组的最前端,后放入的会在后面,有先后顺序。
//并且数组和C语言中的数组非常相似,也具有下标的概念,每个元素都有对应的下标,下标的范围也是从0开始,到数组元素个数-1,并且,数组的下标不能越界。
NSArray *per = [[NSArray alloc] initWithObjects: per1, per2, per3, per2, nil nil]; //2.如何求得数组元素的个数
NSUInteger count = [per count];
NSLog(@"count=%lu", count); //3.根据索引值获取对象
//objectAtIndex: 根据给定的下标,获取该下标在数组中对应的元素
// Person *person = [per objectAtIndex:0];
//用来获取数组中的第一个元素
Person *person1 = [per firstObject];
// [person sayHi];
[person1 sayHi];
//获取最后一个元素
Person *person2 = [per lastObject];
[person2 sayHi]; Person *person3 = [per objectAtIndex:[per count] - ];
[person3 sayHi]; //4.获取对象对应的索引值
//根据指定对象获取的永远是该对象对应的第一个下标。
//如果指定对象不在该数组中,则返回一个无穷大的数LONG_MAX
NSUInteger index = [per indexOfObject:per4];
NSLog(@"index = %lu", index);
//5.判断两个数组是否相同。
NSArray *newArr = [NSArray arrayWithObjects:per1, per2, per3, nil nil];
//判断newArr和per是否相同 //isEqualToArray: 判断两个数组中的内容是否相等(也就是数组内的元素是否对应相等)
BOOL isEqual = [per isEqualToArray:newArr];
NSLog(@"%d", isEqual); //(1).数组是一个有序的集合,先添加的元素会在数组的前部。
//(2).数组中的元素可以重复。
NSLog(@"count=%ld", [per count]); //用来判断两个对象是否相等(也就是两个是否是同一个对象)
//对于集合,如果使用isEqual:或者isEqualTo:方法,则内部实现也是比较集合内的元素是否对应相等。
BOOL isEqual1 = [per isEqualTo:newArr];
NSLog(@"isEqual = %d", isEqual1); NSSet *set1 = [NSSet setWithArray:per];
NSSet *set2 = [NSSet setWithArray:newArr];
BOOL is = [set1 isEqualTo:set2];
NSLog(@"is ---> %d", is); //6.数组排序,升序排列
NSArray *strArr = [NSArray arrayWithObjects:@"bb", @"cc", @"aa", @"dd", @"ff", @"bb", nil nil];
NSLog(@"%@", strArr);
//selector 方法选择器
//假设数组中的每一个对象都是字符串对象,我们使用字符串自带的比较方法compare:
//
NSArray *sortArray = [strArr sortedArrayUsingSelector:@selector(compare:)];
NSLog(@"%@", sortArray); //创建一个新的数组,里面有四个Person类型的对象,然后对数组按Person的年龄来进行升序排列
Person *pers1 = [[Person alloc] initWithName:@"zhangsan" sex:@"man" age:];
Person *pers2 = [[Person alloc] initWithName:@"lisi" sex:@"woman" age:];
Person *pers3 = [[Person alloc] initWithName:@"wangwu" sex:@"man" age:];
Person *pers4 = [[Person alloc] initWithName:@"zhangsan" sex:@"man" age:];
Person *pers5 = [[Person alloc] initWithName:@"lisi" sex:@"woman" age:];
Person *pers6 = [[Person alloc] initWithName:@"wangwu" sex:@"man" age:]; NSArray *perArr = [NSArray arrayWithObjects:pers1, pers2, pers3, pers4, pers5, pers6, nil nil];
NSArray *sortArr = [perArr sortedArrayUsingSelector:@selector(compareByAge:)];
NSLog(@"%@", sortArr); //7.对数组遍历
for (int i = ; i < [perArr count]; i++) {
//根据下标获取数组元素
Person *per = [perArr objectAtIndex:i]; //输出per 的信息
// NSLog(@"%@", [per description]);
[per sayHi];
} //快速遍历数组
//从集合中依次将其中的元素一一取出
for (Person *p in perArr) {
[p sayHi];
} }
return ; } 下面就不多说了,可以把代码拷贝到工程中,也可直接看代码的注释。其中,main函数中的打印数组内容采用了多种输出方式,可以学习一下数组的输出。比较的selector中自己定义了一个方法,用来声明比较的方法。

最新文章

  1. yii2事务运用举例
  2. python发送邮件方法
  3. mybatis java.lang.UnsupportedOperationException
  4. Conjugate prior relationships
  5. 【log】logback.xml
  6. QTP插入Output Value和插入CheckPoint,注意点
  7. asp.net 2.0 Session丢失问题
  8. win7 资源管理器的背景色修改
  9. PO,VO,TO,BO,DAO,POJO的解释
  10. 使用awk和sed获取文件奇偶数行的方法总结
  11. Lucene.Net如何实现搜索结果分类统计功能
  12. Java学习——集合框架【4】
  13. ajax执行成功后,在success回调函数中把后台返回的list还原到html的table中
  14. Codeforces Round #512 E - Vasya and Good Sequences
  15. 从零开始学 Web 之 ES6(一)ES5严格模式
  16. maven下载jar包下载不下来的解决方法
  17. 【opencv基础】OpenCV installation stuck at [ 98%] Built target opencv_perf_stitching with no error
  18. UVA-11029 Leading and Trailing
  19. hiho1622 有趣的子区间(YY)
  20. [POI2012]ROZ-Fibonacci Representation (数学)

热门文章

  1. MFC_2.5 选项卡控件的使用
  2. [转]SAS盘和SATA盘之间的区别
  3. 数字图像处理技术在TWaver可视化中的应用
  4. [Algorithm] 11. Linked List Cycle
  5. java基数排序
  6. buf.readUInt32BE()函数详解
  7. Leetcode题目practice
  8. Django加载静态文件失败,已解决
  9. [linux]centos7下解决yum install mysql-server没有可用包
  10. Spring MVC学习总结(10)——Spring MVC使用Cors跨域