02-NSArray、NSSet、NSDictionary 集合类

NSArrayNSSetNSDictionary 集合类  

可以用来装东西

OC数组只能存放OC对象、不能存放非OC对象类型,如intstruct\enu

OC数组不能存放nil

1.NSArray数组

1.NSAarry的创建 不可变数组

1》.  NSArray *array1 = [NSArray array]; // 由于是不可变数组,永远都是空数组
2》.  NSArray *array2 = [NSArray arrayWithObject:@"whblap"];
3》.  NSArray *array3 = [NSArray arrayWithObjects:@"whb",@"lap",nil]; //nil是数组元素        结束的标记
     [array3 count]; // 计算数组元素个数
     [array3 objectAtIndex:1]; // 可取到第二个元素 lap  == array3[0];

4》.  快速创建数组对象     推荐使用,提高编码效率
     NSArray *array4 = @[@"whb",@"lap"];    // @ 是OC特有的关键字,代表创建一个对象 此处为创建一个OC数组对象  并且@只能创建不可变数组NSArray

2.数组遍历

1. 普通遍历:
NSArray *array = @[@"whb",@"lap"];

for(int i= 0;i<array.count;i++){
    NSLog(@"%@",array[i]);
}
2. 快速遍历:
NSArray *array = @[@"whb",@"lap"];

for (id obj in array)  // obj 代表着数组中的每一个元素
{                   
NSUInteger i = [array indexOfObject:obj]; // 找出obj元素在数组中的位置
    NSLog(@"%ld ---- %@",i, obj);
}
3. block遍历:
[array enumerateObjectsUsingBlock:           //每拿到一个元素的时候就会调用一次block

  ^(id obj, NSUInteger idx,BOOL *stop)      // obj是对应里面的元素 idx是对应的元素下标(即索引) 并且当前元素和索引位置当做参数传给block
 {
     NSLog(@"%ld --- %@",idx,obj);
 }];

3.NSMutableArray 可变数组

 

NSMutableArray *array = [NSMutableArray arrayWithObjects:@"whb",@"lap",nil];
//添加元素
[array addObject:@"hello"];
// 删除所有元素
[array removeAllObjects];
// 删除指定的对象
[array removeObject:@"hello"];
[array removeObjectAtIndex:1];
// 打印数组
NSLog(@"%@",array);

 

2.NSSet集合

1.NSSetNSArray的对比

1> 共同点

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

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

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

 

2> 不同点

* NSArray有顺序,NSSet没有顺序

2.NSMutableSet 可变集合

NSMutableSet *set = [NSMutableSet set]; // 空的集合对象
[set addObject:@"whb"];   // 添加某个元素个数
[set removeObject:@"whb"];   // 删除某个元素
NSString *str = [set anyObject];  // 随机取出某个元素
NSLog(@"打印随机取的元素 %@",str); 

 

3. NSDictionary字典

 1.NSDictionary字典  不可变字典

字典特点: 

  • key ----> value        索引 ----> 文字内容
  • 里面存储的东西都是键值对
  • 字典不允许有相同的key,但允许有相同的valueObject
  • 字典是无序的

 

  2.NSDictionary的创建

1》.NSDictionary *dict = [NSDictionary dictionaryWithObject:@"whb",forKey:@"name"];
// NSDictionary *dict = [NSDictionary dictionaryWithObjects:objects forKeys:keys];

2》.NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:
                      @"whb", @"name",
                      @"福建", @"address",
                      @"841657484", @"qq", nil];  // 这种一般不写,可用Xcode编译器特性,下面一段代码代替

3》. NSDictionary *dict = @[@"name" : @"whb",@"address" : @"福建",@"qq" : @"841657484"];   // 推荐使用

 

 利用key 查找对应的值

1》. id obj = [dict objectforKey:@"name"];  // 不推荐使用

2》. id obj = @[@"name"];     // 推荐使用   这行代码会自动转成上面那段代码

// 返回的是键值对的个数
NSLog(@"%ld", dict.count);

 


 

2.NSMutableDictionary 可变数组

NSMutableDictionary *dict = [NSMutableDictionary dictionary];
//添加键值对 [dict setObject:@"value" forKey:@"Key"];
// 移除键值对 [dict removeObjectForKey:@"Key"]; 

 

3.字典的遍历

1. 普通遍历

NSArray *keys = [dict allKeys];

for(int i = 0;i<dict.count;i++)
{
    NSString *key =  keys[i]; // 取到每一个key
    NSString *object = dict[key]; //根据key 查找对应的object
    NSLog(@"%@ = %@", key, object);
}

 

集合小结: 

和java对比:

NSArray ==== ArrayList

NSSet ==== HashSet

NSDictionary ==== HashMap

 

1.NSArray\NSMutableArray

* 有序

* 快速创建(不可变):@[obj1, obj2, obj3]

* 快速访问元素:数组名[i]

 

2.NSSet\NSMutableSet

* 无序

 

3.NSDictionary\NSMutableDictionary

* 无序

* 快速创建(不可变):@{key1 : value1, key2 : value2}

* 快速访问元素:字典名[key]

 

综合应用,LOOK下面代码:

NSArray *persons = @[
                     @{@"name" : @"jack", @"qq" : @"432423423", @"books": @[@"5分钟突破iOS编程", @"5分钟突破android编程"]},
                     @{@"name" : @"rose", @"qq" : @"767567"},
                     @{@"name" : @"jim", @"qq" : @"423423"},
                     @{@"name" : @"jake", @"qq" : @"123123213"}
                     ];

// NSDictionary *jim = persons[2];
NSString *bookName = persons[0][@"books"][1];
NSLog(@"%@", bookName);
//NSArray *array = persons[0][@"books"];
//NSLog(@"%@", array);
// 先取出1位置对应的字典
// 再取出字典中qq这个key对应的数据
//NSLog(@"%@", persons[1][@"qq"]);
// NSLog(@"%@", jim);

posted on 2014-05-14 23:41  ゴルツの惠斌纳閣下  阅读(334)  评论(0编辑  收藏  举报