首页 > 代码库 > 黑马程序员——集合

黑马程序员——集合

一、NSArray和NSMutableArray

(一)NSArray不可变数组

(1)NSArray的基本介绍

NSArray是OC中使用的数组,是面向对象的,以面向对象的形式操纵对象,是不可变数组。

C语言数组有一个缺点即数组中只能存放同种数据类型的元素。

OC数组只能存放OC对象,不能存放非OC对象,如int,结构体和枚举等。

 

(2)NSArray的创建

    NSArray *array2 = [NSArray arrayWithObject:@"jack"];

    // nil是数组元素结束的标记

    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];

    // 快速创建一个NSArray对象

    NSArray *array4 = @[@"jack", @"rose", @"4324324"];

(3)NSArray的访问

      //使用索引

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

    //像C语言数组一样使用下标

    NSLog(@"%@", array3[0]);

 

4)NSArray的遍历

数组的遍历有以下几种方式:

首先创建一个数组

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

NSArray *array = @[p, @"rose", @"jack"];

第一种方法:使用for循环遍历

id obj代表着数组中的每一个元素

    int i = 0;

        for (id obj in array)

        {

            // 找出obj元素在数组中的位置

            NSUInteger i = [array indexOfObject:obj];

            NSLog(@"%ld - %@", i, obj);    

            if (i==1)

            {

                break;

            }

        }

 第一种方法:使用Block循环遍历

[array enumerateObjectsUsingBlock:

     

     // 每遍历到一个元素,就会调用一次block

     // 并且当前元素和索引位置当做参数传给block

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

     {

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

         

         

         if (idx == 0)

         {

             // 停止遍历

             *stop = YES;

         }

         

     }];

 

每拿到一个元素,就传递给obj,就会调用一次block,并且把当前的元素和索引位置当做参数传递给block。

注意1:break只使用在两种场合,即switch和循环结构中。

注意2:stop参数用来停止遍历,其值若为YES,则停止。

 

二)NSMutableArray可变数组

(1)NSMutableArray的基本使用

注意:NSMutableArray继承自NSArray,几乎拥有NSArray的一切方法。

 NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];

    

    // 添加元素

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

    

    [array addObject:@"jack"];

    

    // 删除元素

    //[array removeAllObjects];

    // 删除指定的对象

    // [array removeObject:@"jack"];

    [array removeObjectAtIndex:0];

    

二、NSSet和NSMutableSet

(一)NSSet不可变集合

基本使用:

NSSet *s = [NSSet set];

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

    

    // 随机拿出一个元素

    NSString *str =  [s2 anyObject];

 

    // 错误写法

    // [array addObject:nil];

 

(三)NSSet和NSArray的对比

(1)共同点:

1)都是集合,都能够存放多个对象

2)只能存放oc对象,不能存放非oc对象类型(如int等基本数据类型和结构体,枚举等)。

3)本身都不可变,都有一个可变的子类。

(2)不同点:

1)NSArray有顺序,NSSet没有顺序

三、NSDictionary和NSMutableDictionary

(一)NSDictionary不可变字典

(1)介绍

现实中的字典:根据索引找到具体的内容

OC中的NSDictionary:根据key找到value。里面存储的东西都是键值对。

(2)NSDictionary的创建

 //第一种方式

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

    

    //第二种方式

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

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

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

    //第三种方式

     NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:

     @"jack", @"name",

     @"北京", @"address",

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

    //第四种方式 

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

 (3)NSDictionary的访问

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

    //根据key获取对应的值

     id obj = [dict objectForKey:@"name"];

    id obj = dict[@"name"];

    NSLog(@"%@", obj);

4)NSDictionary的遍历

 NSDictionary *dict = @{

    @"address" : @"北京",

    @"name" : @"jack",

    @"name2" : @"jack",

    @"name3" : @"jack",

    @"qq" : @"7657567765"};

    //第一种方式:

        NSArray *keys = [dict allKeys];

    

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

        {

            NSString *key = keys[i];

            NSString *object = dict[key];

    

    

            NSLog(@"%@ = %@", key, object);

        }

    

    //第二种方式

    [dict enumerateKeysAndObjectsUsingBlock:

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

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

         

         // *stop = YES;

     }];

}

 

(二)NSMutableDictionary可变字典

(1)NSMutableDictionary的基本使用

 NSMutableDictionary *dict = [NSMutableDictionary dictionary];

    

    // 添加键值对

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

    

    

    [dict setObject:@"北京" forKey:@"address"];

    

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

    

    

    // 移除键值对

    // [dict removeObjectForKey:<#(id)#>];

    

    

    NSString *str = dict[@"name"];

    

    

    //NSLog(@"%@", str);

    

    NSLog(@"%@", dict);

 

黑马程序员——集合