您的位置:首页 > 职场人生

黑马程序员---OC Foundation框架--集合类

2015-04-14 15:50 381 查看
            ------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!
-------

集合类:

一、NSArray

1.NSArray \ NSMutableArray

NSArray:面向对象类型,操作OC数组,不能存放基本数据类型/*

 

1>   C语言数组 缺点是只能放一类型的对象

如果想创建一个Person数组,

Person *p =[  [ Person  alloc ]  init ] ;

Person*person[5] = { p, [  [ Person  alloc ]  init ] };

但这样只能用来保存一种OC对象。

2>   NSArray

不可变数组 ,当时创建是有多少个元素,以后永远都是多少个元素

NSMutableArray :(NSArray的子类)可变数组

 

创建NSArray:

NSArray *array =[ NSArray array];   //创建是没有设置元素,这个数组永远是空数组

NSArray *array2= [ NSArray arrayWithObject: @"jackl",nil];  //如果一个最后一个结束nil  就不用写了

NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil];

//  nil 是数组元素的结束的标记,必须有

NSArray *array3= [ NSArray arrayWithObject: @"jack", @"Rose", nil,nil];   //错误写法  OC数组不能存放nil 值

 

 

3>计算数组中的对象个数的二种方法

[ array3 count];

array3.count;

打印具体位置的数组对象的二种方法

NSLog(@"%@",  [ array3 objectAtIndex:1]);

Array3[ 1 ];

 

快速创建@; 

NSArray *array5= @[@"jack" ,@"ROSe", @"adfa"];

 

4>NSArray的遍历:4种代码实现

 //  a.普通的for循环 

for(int i=0;i<array5.count;i++) 

{ NSLog(@"%@", array[i]); } 

 //    b.快速for循环

for(id obj in array5)

{        //id obj 代表数组中的每个元素

              //i代表元素在数组中的位置

          NSUinteger i = [ array5   indexOfObject: obj];

      NSLog(@"%d—%@",i,obj); 

}

 

//   c.OC 中的方法enumerateObjectsUsingBlock

       每遍历到一个元素,就会调用一次block。并且当前元素和索引位置当作参数传给block

[array5  enumerateObjectsUsingBlock:

^( id obj,NSUInteger idx,BOOL *stop)

                    NSlLog(@"%ld--%@",idx, obj);

        If ( idx ==1)  *stop = YES;//用来标记是否停止遍历

       ]

  反序遍历

 

             [array5enumerateObjectsWithOptions:NSEnumerationReserver usingBlock:

              ^(idobj,NSUInteger idx,BOOL *stop)

              {

                     NSlLog(@"%ld         %@", idx, obj);

              }];

 

2.NSMutableArray:

创建可变数组:

NSMutableArray *array = [NSMutableArrayarray];

NSMutableArray *array2 = [NSMutableArrayarrayWithObject:@"rose",nil ];

添加元素:

[ array addObject: [ [ Person alloc]   init] ;

[ array addObject:@"Jack" ];

//删除全部对象

[ array removeAllObjects];

//删除指定对象

[ array removeObect:@"jack"] ;

[array removeObjectAtIndex:2];

 

二、NSSet

没有顺序,有子类NSMutableSet

创建NSSet:

NSSet *s = [NSSet set];   

NSSet *s2 = [NSSetsetWithObjects:@"jack",@"rose",@"jack2",@"jack3",nil];

// 随机拿出一个元素

NSString *str =  [s2 anyObject];

NSLog(@"%ld", s2.count);

NSSet和NSArray的对比

 1> 共同点

 * 都是集合,都能存放多个OC对象

 * 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)

 * 本身都不可变,都有一个可变的子类

 2> 不同点

l      NSArray有顺序,NSSet没有顺序

 

 

三、NSDictionary

1.NSDictionary(字典)通常在给定一个关键字(通常是一个NSString字符串)下存储一个数值(可以是任何类型的对象)。然后你可以使用这个关键字查找相应的数值;

2.NSDictionary里面存储的是键值对,key----->value;

3.常用方法:

创建字典:

NSDictionary *dict = [NSDictionarydictionaryWithObject:@"jack" forKey:@"name"];

id obj = dict[@"name"];   

NSLog(@"%@", obj);

 

和数组创建相应字典:

NSArray *keys = @[@"name",@"address"];

NSArray *objects = @[@"jack",@"北京"];

NSDictionary *dict = [NSDictionarydictionaryWithObjects:objects forKeys:keys];

 

NSDictionary *dict = [NSDictionarydictionaryWithObjectsAndKeys:

                               @"jack",@"name",

                               @"北京", @"address",

                               @"32423434",@"qq", nil];

 

快速创建字典:

NSDictionary *dict = @{@"name" :@"jack", @"address" : @"北京"};

这两句效果相同

 

id obj = [dictobjectForKey:@"name"];

id obj = dict[@"name"];

 

返回的是键值对的个数

NSLog(@"%ld", dict.count);

 

4.NSMutableSet可变字典

   NSMutableDictionary *dict = [NSMutableDictionary dictionary];

   

添加键值对

   [dict setObject:@"jack" forKey:@"name"];

[dictsetObject:@"北京"forKey:@"address"];

 

如果对同一个Key重复定义,相应的值是最后一个添加的值,相当与覆盖重写,且不增加对键数(最后name的值是rose)

[dictsetObject:@"rose" forKey:@"name"];

 

 移除键值对

    [dict removeObjectForKey:@”name”];

 

遍历字典

NSLog(@"%@",dict);

 

NSDictionary中的快速创建方法不能用在NSMutableSet中

 

       5.字典遍历:

           [dict enumerateKeysAndObjectsUsingBlock:

    ^(id key, id obj, BOOL *stop) {

        NSLog(@"%@ - %@", key, obj);

        

        // *stop = YES;

    }];

 

 

 

 

 

 

 

 

 

 

以下代码是不为之常见的:知道即可

 

1.

 

NSArray *Person = @[

 

@{@"name":@"jack",@"qq":@"34345"},

 

@{@"name":@"Tack",@"qq":@"34334545"},

 

@{@"name":@"Cack",@"qq":@"34353245"},

 

@{@"name":@"Lck",@"qq":@"343455562"}

 

];

 

NSDictionary *dict =Person[ 2];-------------------------------->@{@"name":@"Tack",@"qq":@"34334545"}

 

NSLog(@"%@",dict);-------------------------------------------->name:Tack    qq:34334545

 

 

 

NSLog(@"%@",Person[2][@"qq"])--------------------------------->34334545

 

2.

 

NSArray *Person = @[

 

@{@"name":@"jack",@"qq":@"34345",@"book":@[@"平凡的世界",@"追风的人"]},

 

@{@"name":@"Tack",@"qq":@"34334545"}

 

];

 

NSLog(@"%@",Person[0][@"book][1]);--------------------->追风的人
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: