黑马程序员_Foundation框架基础知识(二)集合类

来源:互联网 发布:互联网金融教学软件 编辑:程序博客网 时间:2024/05/29 04:42

------Java培训、Android培训、iOS培训、.Net培训、期待与您交流!


一.NSArray和NSMutableArray

1.NSArray

 1>NSArray根据一定的顺序保存OC对象类型的数据(不能存放空值nil),不可以存放非OC对象类型的数据。一旦创建了一个NSArray对象,对象里面包含的元素个数是不可变的。


 2>创建NSArray对象

  1)创建NSArray对象有多种方式:

    // 这个array永远是空数组,因为NSArray对象是不可变的。    NSArray *array1 = [NSArray array];        // 创建拥有一个元素的NSArray对象    NSArray *array2 = [NSArray arrayWithObject:@"jack"];        // 创建拥有多个元素的NSArray对象。但是最后一个参数必须是nil,是数组元素结束的标记。    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];        // 快速创建一个NSArray对象。这种方式只能用来创建NSArray数组。这是一个编译器特性。    NSArray *array4 = @[@"jack", @"Anna"];

 3>获取数组元素个数

    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];    // 获取array3的元素个数。    NSUInteger len = [array3 count];        //也可以使用点语法。@property(readonly) NSUInteger count。    //NSUInteger len = array3.count;


 4>访问数组元素

    NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"Anna",nil];    // 访问数组元素,2种方式    NSLog(@"%@",[array3 objectAtIndex:1]);    // 快速访问数组元素。编译器特性,编译器会自动转成第一种方式    NSLog(@"%@",array3[0]);

 5>遍历数组

  1) 基本方式

    Person *p = [[Person alloc] init];        //第一种方式    NSArray *array = @[p, @"jack"]; // @[]只能用来创建不可变数组        for (int i = 0; i<array.count; i++)    {        NSLog(@"%@",array[i]);    }

   2)快速遍历数组

    Array *array = @[@"JACK",@"Anna"];        // 循环体每执行一次都会按顺序从数组中取出对象赋值给obj    for (id obj in array)    {           NSLog(@"%@",obj);    }

   3)使用block遍历数组

    // 每获取到一个元素,就会调用一次block并且当前元素和其索引位置当做参数传给block    // *stop用来控制循环是否终止    [array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)     {        NSLog(@"%ld - %@", idx, obj);        if (idx ==1)        {            *stop = YES;        }    }];

2.NSMutableArray

 1>NSMutableArray是NSArray的子类,所以NSArray中的方法NSMutableArray都可以使用。与NSArray不同的是,NSMutableArray数组是可变的,也就是数组元素个数是可以改变的。

 

 2>创建NSMutableArray对象的方法与NSArray相同,但是不可以使用快速创建对象的方式创建NSMutableArray对象。

    // 错误写法    NSMutableArray *mutableArray = @[@"jack"];

 3>添加元素

    NSMutable *array = [NSMutableArray array];        [array addObject:[[Person alloc] init]];        [array addObject:@"jack"];

 4>删除元素

    NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];    // 删除所有元素    //[array removeAllObjects];        // 删除指定的对象    // [array removeObject:@"jim"];        // 按索引位置删除元素    [array removeObjectAtIndex:0];    // 错误写法    // [array addObject:nil];

二.NSSet和NSMutableSet

1.NSSet

 1>NSSet也是用来保存OC对象类型的数据(不能是空值nil),但是它是没有顺序的,它里面保存对象的位置是随机的。不可以存放非OC对象类型的数据。一旦创建了一个NSSet对象,对象里面包含的元素个数是不可变的。


 2>创建NSSet对象

    // s始终都会为空    NSSet *s = [NSSet set];        NSSet *s1 = [NSSet setWithObject:@"jack"];        NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];

 3>访问元素

    NSSet *set = [NSSet setWithObject:@"jack"];    // 随机拿出一个元素,因为NSSet是无序的。    NSString *str =  [set anyObject];

 4>获取元素个数


    NSSet *set = [NSSet setWithObjects:@"jack",@"lose"];     NSLog(@"%ld", set.count);

2.NSMutableSet

 1>NSMutableSet是NSSet的子类,所以NSSet中的方法NSMutableSet都可以使用。与NSSet不同的是,NSMutableSet是可变的,也就是数组元素个数是可以改变的。


 2>添加元素

    NSMutableSet *s = [NSMutableSet set];        [s addObject:@"hack"];

 3>删除元素

    NSMutableSet *set = [NSMutableSet setWithObjects:@"jack",@"lose"];    //删除指定元素    [set removeObject:@"jack"];

三.NSDictionary和NSMutableDictionary

1.NSDictionary

 1>NSDictionary也是用来保存对象的,保存的方式有些特别,它保存的是键值对而且是无序的,每一个对象对应一个key值。一旦创建了一个NSDictionary对象,对象里面包含的元素(键值对)个数是不可变的。


 2>创建NSDictionary对象

  1)注意: 字典不允许有相同的key,但允许有相同的value(Object)

    //创建拥有多个元素的对象    NSDictionary *dict1 = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];    //通过数组创建对象    NSArray *keys = @[@"name", @"address"];    NSArray *objects = @[@"jack", @"北京"];        NSDictionary *dict2 = [NSDictionary dictionaryWithObjects:objects forKeys:keys];      //可读性差    NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:     @"jack", @"name",     @"北京", @"address",     @"32423434", @"qq", nil];    // 快速创建对象方式,只用于NSDictionary对象    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};

 3>获取对象

    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};        // 获取key值对应的对象    id obj = [dict objectForKey:@"name"];        // 快速获取方式    id obj = dict[@"name"]

 4>返回元素个数

    NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};        // 返回的是键值对的个数    NSLog(@"%ld", dict.count);

 5>遍历

  1)

    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);    }

   2)通过block遍历

    NSDictionary *dict = @{    @"address" : @"北京",    @"name" : @"jack",    @"name2" : @"jack",    @"name3" : @"jack",    @"qq" : @"7657567765"};    [dict enumerateKeysAndObjectsUsingBlock:     ^(id key, id obj, BOOL *stop)      {         NSLog(@"%@ - %@", key, obj);                  // *stop = YES;     }];

2.NSMutableDictionary

 1>NSMutableDictionary是是NSDictionary的子类,所以NSDictionary中的方法NSMutableDictionary都可以使用。与NSDictionary不同的是,NSMutableDictionary是可变的,也就是数组元素个数是可以改变的。


 2>添加元素

  1)注意: 再次为同一个key设置值的时候,会覆盖掉以前的值。

    NSMutableDictionary *dict = [NSMutableDictionary dictionary];    [dict setObject:@"jack" forKey:@"name"];        [dict setObject:@"北京" forKey:@"address"];        [dict setObject:@"rose" forKey:@"name"];

3>删除元素

    NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjeck:@"jack" forKey:@"name"];    // 删除指定key值对应的对象    [dic removeObjectForKey:@”name“];


0 0
原创粉丝点击