【黑马程序员】————Foundation框架02常用类—集合类

NSArray

->NSMutableArray

NSSet

->NSMutableSet

NSDictionary

->NSMutableDictionary

 

1、NSArray/NSMutableArray

 

NSArray :不可变数组
 
NSMutableArray : 可变数组

 

基本使用

 1 void use()
 2 {
 3     /*
 4        C数组对比
 5      int a = 5;
 6      
 7      int ages[10] = {1, 90, 89, 17};
 8      
 9      Person *p = [[Person alloc] init];
10      Person *persons[5] = {p,  [[Person alloc] init]};
11      */
12     
13     // OC数组不能存放nil值
14     // OC数组只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等
15     
16     // 这个array永远是空数组
17     // NSArray *array = [NSArray array];
18     
19     
20     /*
21      1.NSArray的创建
22      */
23     NSArray *array2 = [NSArray arrayWithObject:@"jack"];
24     
25     // nil是数组元素结束的标记
26     NSArray *array3 = [NSArray arrayWithObjects:@"jack", @"rose", nil];
27     // [array2 count];
28     
29     //NSArray *array4 = [NSArray arrayWithObjects:@"jack", @"rose", @"4324324", nil];
30     
31     // 快速创建一个NSArray对象
32     NSArray *array4 = @[@"jack", @"rose", @"4324324"];
33     
34     
35     /*
36      2.NSArray的元素个数
37      */
38     NSLog(@"%ld", array3.count);
39     
40     
41     /*
42      3.NSArray中元素的访问
43      */
44     NSLog(@"%@", [array3 objectAtIndex:1]);
45     
46     //array3[1];
47     NSLog(@"%@", array3[0]);
48 }

 

遍历数组

 1 oid use2()
 2 {
 3     Person *p = [[Person alloc] init];
 4     
 5     NSArray *array = @[p, @"rose", @"jack"];
 6     
 7     //    for (int i = 0; i<array.count; i++)
 8     //    {
 9     //        NSLog(@"%@", array[i]);
10     //    }
11     
12     // id obj代表着数组中的每一个元素
13     //int i = 0;
14     //    for (id obj in array)
15     //    {
16     //        // 找出obj元素在数组中的位置
17     //        NSUInteger i = [array indexOfObject:obj];
18     //
19     //        NSLog(@"%ld - %@", i, obj);
20     //        //i++;
21     //
22     //        if (i==1)
23     //        {
24     //            break;
25     //        }
26     //    }
27     
28     [array enumerateObjectsUsingBlock:
29      
30      // 每遍历到一个元素,就会调用一次block
31      // 并且当前元素和索引位置当做参数传给block
32      ^(id obj, NSUInteger idx, BOOL *stop)
33      {
34          NSLog(@"%ld - %@", idx, obj);
35          
36          
37          if (idx == 0)
38          {
39              // 停止遍历
40              *stop = YES;
41          }
42          
43      }];
44     
45     
46     //    void ^(myblock)(id, NSUInteger, BOOL *) = ^(id obj, NSUInteger idx, BOOL *stop)
47     //    {
48     //        NSLog(@"%ld - %@", idx, obj);
49     //
50     //
51     //        if (idx == 0)
52     //        {
53     //            // 停止遍历
54     //            *stop = YES;
55     //        }
56     //    };
57     //
58     //    for (int i = 0; i<array.count; i++)
59     //    {
60     //        // 用来标记是否需要停止遍历
61     //        BOOL isStop = NO;
62     //
63     //        // 取出元素
64     //        id obj = array[i];
65     //        
66     //        myblock(obj, i, &isStop);
67     //        
68     //        
69     //        if (isStop)
70     //        {
71     //            break;
72     //        }
73     //    }
74 
75 }

 

可变数组的基本使用

 1 void use3()
 2 {
 3     NSMutableArray *array = [NSMutableArray arrayWithObjects:@"rose", @"jim", nil];
 4     
 5     // 添加元素
 6     [array addObject:[[Person alloc] init]];
 7     
 8     [array addObject:@"jack"];
 9     
10     // 删除元素
11     //[array removeAllObjects];
12     // 删除指定的对象
13     // [array removeObject:@"jack"];
14     [array removeObjectAtIndex:0];
15     
16     // 错误写法
17     // [array addObject:nil];
18     
19     
20     NSLog(@"%@", array);
21     
22     NSLog(@"%ld", array.count);
23 }


注意:

 1 void use4()
 2 {
 3    // @[] 只创建不可变数组NSArray
 4     /* 错误写法
 5     NSMutableArray *array = @[@"jack", @"rose"];
 6     
 7     [array addObject:@"jim"];
 8     */
 9     
10     
11     //NSArray *array = @[@"jack", @"rose"];
12 }

 

2、NSSet/NSMutableSet

 

NSSet和NSArray的对比
1> 共同点
* 都是集合,都能存放多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int、char、float等,结构体,枚举)
* 本身都不可变,都有一个可变的子类

2> 不同点
* NSArray有顺序,NSSet没有顺序

 

 1 // set的基本使用
 2 void test()
 3 {
 4     NSSet *s = [NSSet set];
 5     
 6     NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose", @"jack2",@"jack3",nil];
 7     
 8     // 随机拿出一个元素
 9     NSString *str =  [s2 anyObject];
10     
11     NSLog(@"%@", str);
12     
13     //NSLog(@"%ld", s2.count);
14 }
 1 void test2()
 2 {
 3    NSMutableSet *s = [NSMutableSet set];
 4     
 5     // 添加元素
 6     [s addObject:@"hack"];
 7     
 8     // 删除元素
 9     // [s removeObject:(id)];
10 }

3、NSDictionary/NSMutableDictionary

 1 void use()
 2 {
 3     /*
 4      字典:
 5      
 6      key ----> value
 7      索引 ----> 文字内容
 8      
 9      里面存储的东西都是键值对
10      
11      
12      */
13     
14     // NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack" forKey:@"name"];
15     
16     
17     // NSArray *keys = @[@"name", @"address"];
18     // NSArray *objects = @[@"jack", @"北京"];
19     
20     // NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];
21     
22     
23     /*
24      NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
25      @"jack", @"name",
26      @"北京", @"address",
27      @"32423434", @"qq", nil];*/
28     
29     
30     NSDictionary *dict = @{@"name" : @"jack", @"address" : @"北京"};
31     
32     // id obj = [dict objectForKey:@"name"];
33     
34     id obj = dict[@"name"];
35     
36     NSLog(@"%@", obj);
37     
38     
39     
40     // 返回的是键值对的个数
41     NSLog(@"%ld", dict.count);
42 }
 1 void use2()
 2 {
 3     NSMutableDictionary *dict = [NSMutableDictionary dictionary];
 4     
 5     // 添加键值对
 6     [dict setObject:@"jack" forKey:@"name"];
 7     
 8     
 9     [dict setObject:@"北京" forKey:@"address"];
10     
11     [dict setObject:@"rose" forKey:@"name"];   //覆盖
12     
13     
14     // 移除键值对
15     // [dict removeObjectForKey:(id)];
16     
17     
18     NSString *str = dict[@"name"];
19     
20     
21     //NSLog(@"%@", str);
22     
23     NSLog(@"%@", dict);
24     
25     
26     //NSLog(@"%@", @[@"jack", @"rose"]);
27 }
1 void use3()
2 {  //错误写法 
3     NSMutableDictionary *dict = @{@"name" : @"jack"};
4     
5     
6     [dict setObject:@"rose" forKey:@"name"];
7 }
 1 void use4()
 2 {
 3     // 字典不允许有相同的key,但允许有相同的value(Object)
 4     // 字典的无序的
 5     NSDictionary *dict = @{
 6     @"address" : @"北京",
 7     @"name" : @"jack",
 8     @"name2" : @"jack",
 9     @"name3" : @"jack",
10     @"qq" : @"7657567765"};
11     
12     //    NSArray *keys = [dict allKeys];
13     //
14     //    for (int i = 0; i<dict.count; i++)
15     //    {
16     //        NSString *key = keys[i];
17     //        NSString *object = dict[key];
18     //
19     //
20     //        NSLog(@"%@ = %@", key, object);
21     //    }
22     
23     
24     [dict enumerateKeysAndObjectsUsingBlock:
25      ^(id key, id obj, BOOL *stop) {
26          NSLog(@"%@ - %@", key, obj);
27          
28          // *stop = YES;
29      }];
30 }

4、集合总结

1>NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1, obj2, obj3]
* 快速访问元素:数组名[i]

2>NSSet\NSMutableSet
* 无序

3>NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
*/

 

补充:

 1 #import <Foundation/Foundation.h>
 2 
 3 int main()
 4 {
 5     NSArray *persons = @[
 6     @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
 7     @{@"name" : @"rose", @"qq" : @"767567"},
 8     @{@"name" : @"jim", @"qq" : @"423423"},
 9     @{@"name" : @"jake", @"qq" : @"123123213"}
10     ];
11     
12     // 
13     // NSDictionary *jim = persons[2];
14     
15     
16     // 
17     NSString *bookName = persons[0][@"books"][1];
18     NSLog(@"%@", bookName);
19     //NSArray *array = persons[0][@"books"];
20     
21     //NSLog(@"%@", array);
22     
23     // 先取出1位置对应的字典
24     // 再取出字典中qq这个key对应的数据
25     //NSLog(@"%@", persons[1][@"qq"]);
26     
27     // NSLog(@"%@", jim);
28     return 0;
29 }

 

posted @ 2014-08-24 16:47  Jr_711  阅读(187)  评论(0编辑  收藏  举报