iOS开发-Day18-OC NSArray&NSMutableArray

今天学习了OC中数组Array和NSMutableArray可变数组,并且结合实例练习了有关的数组操作方法
几个注意点:

//NSArray中不可以存放基本数据类型,只能存放类的实例,如果需要将基本类型、结构体放入到数组中得话,需要通过NSNumber/NSValue进行数据的封装
//不能在NSArray中存储nil ,nil是作为结束的标志

直接上例子:

//以为需要实现数组储存类对象,因此写了一个学生类
#import <Foundation/Foundation.h>
@interface Student : NSObject
@property(strong,nonatomic) NSString * name;
@property(assign,nonatomic) int age;
- (NSComparisonResult)compareStudentDesc:(Student *)other;
-(NSComparisonResult)compareStudentAgeDesc:(Student *)other;
@end
//
#import "Student.h"
@implementation Student
- (NSString *)description
{
    return [NSString stringWithFormat:@"%@,%d", self.name,self.age];
}
/**
 *  安装姓名降序排列
 *
 *  @param other 集合中得元素
 *
 *  @return -1,0,+1
 */
- (NSComparisonResult)compareStudentDesc:(Student *)other
{
    return  [other.name compare:self.name];
}
-(NSComparisonResult)compareStudentAgeDesc:(Student *)other
{
    if (other.age>self.age) {
        return -1;
    }else if (other.age==self.age){
        return 0;
    }else{
        return 1;
    }
}
@end


//
//  main.m
//  OC16-8.5-NSArray
//
//  Created by 严诚 on 15/8/5.
//  Copyright (c) 2015年 严诚. All rights reserved.
//

#import <Foundation/Foundation.h>
#import "Student.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
//        NSLog(@"Hello, World!");
//        NSString *str =@"abc def hij";

//创建数组
//        NSArray *arr=[str componentsSeparatedByString:@" "];//字符串按空格分隔成数组元素
//        NSLog(@"%@",arr);
//        NSString *str1=[arr componentsJoinedByString:@" "];//数组元素加上空格组合为字符串
//        NSLog(@"%@",str1);

//        NSArray *arr=[NSArray array];
//        NSArray *arr1=[NSArray arrayWithObject:@"yc"];//初始化数组加入对象
//        NSString *name =[arr1 objectAtIndex:0];//按照下标获取元素
//        NSLog(@"%@",name);
//        NSArray *arr2=[NSArray arrayWithObjects:@"yc",@"dq", nil];
//        NSLog(@"%ld",arr2.count);
//        for (int i=0; i<
//             arr2.count; i++) {
//            NSString *name1=[arr2 objectAtIndex:i];
//            NSLog(@"%@",name1);
//        }


//        Student *stu=[Student new];
//        stu.name=@"yc";
//        stu.age=18;
//        Student *stu1=[Student new];
//        stu1.name=@"dq";
//        stu1.age=19;
//        Student *stu2=[Student new];
//        stu2.name=@"wyy";
//        stu2.age=19;
//        NSArray *students=[NSArray arrayWithObjects:stu,stu1,stu2, nil];
//        NSLog(@"%@",students);//调用descration方法


//遍历数组
//        for (int i=0; i<students.count; i++) {
//            NSLog(@"%@",[students[i] name]);
//            Student *temp=students[i];
//            NSLog(@"-%@",temp.name);
//        }
//        //快速枚举
//        for(Student *stu in students){
//            NSLog(@"%d",stu.age);
//        }
//       
//        

        NSArray *arr3=[NSArray arrayWithObjects:@"aaa",@"b0",@"fff",@"ca", nil];
        //NSArray *arr4=[NSArray arrayWithArray:arr3];
        //取第一个和最后一个元素
        NSLog(@"first is %@",arr3.firstObject);
        NSLog(@"last is %@",arr3.lastObject);
        //查找元素、获取等值元素的下标
        long int index=[arr3 indexOfObject:@"aaa"];
        NSLog(@"%ld",index);
        //迭代遍历
        NSEnumerator *e=[arr3 objectEnumerator];
        id object;
        while (object=[e nextObject]) {
            NSLog(@"-%@",object);
        }

        for(id aobj in e){
            NSLog(@"--%@",aobj);
        }

//        
//        NSEnumerator *e=[arr3 reverseObjectEnumerator];
//        id object;
//        while (object=[e nextObject]) {
//            NSLog(@"-%@",object);
//        }

//        数组比较
//        BOOL bol =[arr3 isEqualToArray:arr4];
//        NSLog(@"%d",bol);
//        数组追加
//        NSLog(@"%@",[arr3 arrayByAddingObject:@"ddd"]);
//        数组排序(选择器法)
//        NSLog(@"%@",[arr3 sortedArrayUsingSelector:@selector(compare:)]);
//        NSArray *sortarr=[arr3 sortedArrayUsingSelector:@selector(compare:)];
//        for(NSString *str in sortarr){
//            NSLog(@"%@",str);
//        }
//        
        Student *stu=[Student new];
        stu.name=@"yc";
        stu.age=18;
        Student *stu1=[Student new];
        stu1.name=@"dq";
        stu1.age=19;
        Student *stu2=[Student new];
        stu2.name=@"wyy";
        stu2.age=17;
        NSArray *students=[NSArray arrayWithObjects:stu,stu1,stu2, nil];
        //NSLog(@"%@",students);//调用descration方法
        for(Student *stu3 in students){
            NSLog(@"%@",stu3);
        }
//        //自写选择器进行排序
//        NSArray *newStudent=[students sortedArrayUsingSelector:@selector(compareStudentDesc:)];
//        for(Student *stu4 in newStudent){
//            NSLog(@"%@",stu4);
//        }
//        NSArray *newStu=[students sortedArrayUsingSelector:@selector(compareStudentAgeDesc:)];
//        for(Student *stu5 in newStu){
//            NSLog(@"%@",stu5);
//        }
//        
//        //描述信息排序
//        //按照name属性进行降序排序
//        NSSortDescriptor *sd=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:1];
//        //将信息封装到集合中
//        NSArray *sortstu2=[NSArray arrayWithObject:sd];
//        //调用集合的描述信息排序方法
//        NSArray *newStu2=[newStu sortedArrayUsingDescriptors:sortstu2];
//        for(Student *stu6 in newStu2){
//            NSLog(@"%@",stu6);
//        }

        //代码块排序
        NSArray *newstu=[students sortedArrayUsingComparator:^NSComparisonResult(id obj1,id obj2){
            Student *stuA=(Student *)obj1;
            Student *stuB=(Student *)obj2;
            return [stuA.name compare:stuB.name];
        }];
        for(Student *stu6 in newstu){
                NSLog(@"%@",stu6);
            }


    }
    return 0;
}

下面是关于可变数组的一些实例,其更加灵活易用

//
//  main.m
//  OC16-8.5-NSMutableArray
//
//  Created by 严诚 on 15/8/5.
//  Copyright (c) 2015年 严诚. All rights reserved.
//

#import <Foundation/Foundation.h>

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        // insert code here...
        NSLog(@"Hello, World!");
        NSMutableArray *muArr=[NSMutableArray arrayWithCapacity:0];//初始化可变数组
        NSLog(@"%ld",muArr.count);//数组长度
        [muArr addObject:@"aaaa"];//添加元素
        [muArr addObject:@"bbbbb"];
        [muArr addObject:@"bbbbb"];
        [muArr addObject:@"ffbb"];
        [muArr addObject:@"ddd"];
        [muArr insertObject:@"ccc" atIndex:1];//按照下标插入元素
        NSLog(@"%ld",muArr.count);
        for (int i=0; i<muArr.count; i++) {
            NSLog(@"%@",[muArr objectAtIndex:i]);//按照下标循环遍历
        }
        //[muArr removeAllObjects];//移除所有元素
        //[muArr removeObject:@"ccc"];//移除某值元素
        //[[muArr removeObjectAtIndex:1];//移除某下标元素
        NSRange r1={1,2};//NSRange 声明一个范围值(位置,长度)
        [muArr removeObjectsInRange:r1];//在一定范围内删除
        [muArr removeObjectIdenticalTo:@"aaaa" inRange:r1];//在一定范围内删除某值
        NSArray *arr=[NSArray arrayWithObject:@"abcdf"];
        [muArr addObjectsFromArray:arr];//从数组添加元素
        for (int i=0; i<muArr.count; i++) {
            NSLog(@"%@",[muArr objectAtIndex:i]);
        }
        [muArr exchangeObjectAtIndex:0 withObjectAtIndex:1];//交换数组元素
        for (int i=0; i<muArr.count; i++) {
            NSLog(@"%@",[muArr objectAtIndex:i]);
        }
        //[muArr replaceObjectsInRange:r1 withObjectsFromArray:arr];

        //动态数组排序
        //1.选择器
        [muArr sortUsingSelector:@selector(compare:)];
        NSLog(@"%@",muArr);
        //2.排序信息
        NSSortDescriptor *sd=[NSSortDescriptor sortDescriptorWithKey:nil ascending:1];
        [muArr sortUsingDescriptors:@[sd]];//@[]表示集合
        //3.代码块
        [muArr sortUsingComparator:^NSComparisonResult(NSString * obj1,NSString *obj2){
            return [obj1 compare:obj2];
        }];
    }
    return 0;
}

相比上面吧的实例都比较简单易懂,接下来是今天的练习:

/**
*  作业:通过所学知识对西游记师徒进行情景编码,按照收徒的先后顺序依次加入取经团队,可以通过姓名,年龄,本领进行排序。实现如下方法,猪悟能可以离开团队回高老庄。唐僧因误会可以赶走孙悟空等等。
*/
/*题目不难,就是使用今日所学方法,先定义了取经人类,定义了属性和公共方法,又写了徒弟类实现直接离开队伍,写了shifu类,实现踢出元素*/
#import <Foundation/Foundation.h>
@interface Qujinger : NSObject
@property(strong,nonatomic)NSString *name;
@property(assign,nonatomic)int age;
@property(strong,nonatomic)NSString *ability;
-(NSComparisonResult)compareByName:(Qujinger *)other;
-(NSComparisonResult)compareByAge:(Qujinger *)other;
@end

#import "Qujinger.h"
@implementation Qujinger
- (NSString *)description
{
    return [NSString stringWithFormat:@"我是%@,我%d岁,我的本领是%@!", self.name,self.age,self.ability];
}
-(NSComparisonResult)compareByName:(Qujinger *)other
{
    return  [other.name compare:self.name];
}
-(NSComparisonResult)compareByAge:(Qujinger *)other
{
    if (other.age>self.age) {
        return -1;
    }else if (other.age==self.age){
        return 0;
    }else{
        return 1;
    }
}
@end

#import <Foundation/Foundation.h>
#import "Qujinger.h"
@interface Tudi : Qujinger
-(void)goBymyselfFrom:(NSMutableArray *)muarr;
@end

#import "Tudi.h"
@implementation Tudi
-(void )goBymyselfFrom:(NSMutableArray *)muarr
{
    [muarr removeObject:self];
    NSLog(@"%@走了!",self.name);

}
@end

#import <Foundation/Foundation.h>
#import "Qujinger.h"
#import "Tudi.h"
@interface Shifu : Qujinger
-(void)leaveMe:(Tudi *)tudi From:(NSMutableArray *)muarr;
@end

#import "Shifu.h"
@implementation Shifu
-(void)leaveMe:(Tudi *)tudi From:(NSMutableArray *)muarr
{
    [muarr removeObject:tudi];
    NSLog(@"%@你走吧,我不需要你了",tudi.name);
}
@end

#import <Foundation/Foundation.h>
#import "Shifu.h"
#import "Tudi.h"
int main(int argc, const char * argv[]) {
    @autoreleasepool {
        NSMutableArray *qujing=[NSMutableArray arrayWithCapacity:0];
        Shifu *Tang=[Shifu new];
        [Tang setName:@"tangsen"];
        [Tang setAge:26];
        [Tang setAbility:@"赶猴子走"];
        [qujing addObject:Tang];
        Tudi *Sun=[Tudi new];
        [Sun setName:@"sunwukong"];
        [Sun setAge:1500];
        [Sun setAbility:@"打"];
        [qujing addObject:Sun];
        Tudi *Zhu=[Tudi new];
        [Zhu setName:@"zhuwuneng"];
        [Zhu setAge:1900];
        [Zhu setAbility:@"吃"];
        [qujing addObject:Zhu];
        Tudi *Sha=[Tudi new];
        [Sha setName:@"shawujing"];
        [Sha setAge:1800];
        [Sha setAbility:@"躲"];
        [qujing addObject:Sha];
        Qujinger *qu;
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"----现在来按名字排序吧----");
        NSLog(@"先用选择器排序");
        [qujing sortUsingSelector:@selector(compareByName:)];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"再用描述排序");
        NSSortDescriptor *ds1=[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:1];
        [qujing sortUsingDescriptors:@[ds1]];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"最后用代码段排序");
        [qujing sortUsingComparator:^NSComparisonResult(Qujinger *obj1,Qujinger *obj2)
        {
            return [obj1.name compare:obj2.name];
        }];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"--------现在来按年龄排序吧--------");
        NSLog(@"先用选择器排序");
        [qujing sortUsingSelector:@selector(compareByAge:)];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"再用描述排序");
        NSSortDescriptor *ds2=[NSSortDescriptor sortDescriptorWithKey:@"age" ascending:1];
        [qujing sortUsingDescriptors:@[ds2]];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }

        NSLog(@"最后用代码段排序吧");
        [qujing sortUsingComparator:^NSComparisonResult(Qujinger *obj1,Qujinger *obj2)
        {
            if (obj1.age>obj2.age) {
                return -1;
            }else if (obj1.age==obj2.age){
                return 0;
            }else{
                return 1;
            }
        }];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"----每个徒弟都可以选择自己离开队伍----");
        [Zhu goBymyselfFrom:qujing];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
        NSLog(@"--------师傅可以赶走任一个徒弟--------");
        [Tang leaveMe:Sun From:qujing];
        for(qu in qujing)
        {
            NSLog(@"%@",qu);
        }
    }
    return 0;
}

-

-

-15.8.5
-15.8.11

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值