首页 > 代码库 > 02-NSArray、NSSet、NSDictionary 集合类

02-NSArray、NSSet、NSDictionary 集合类

NSArrayNSSetNSDictionary 集合类  

可以用来装东西

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

OC数组不能存放nil

1.NSArray   不可变数组

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

 


 

1.NSSet集合

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

 


 

1. NSDictionary 不可变字典

字典特点:

 

key ----> value        索引 ----> 文字内容

 

里面存储的东西都是键值对

字典不允许有相同的key,但允许有相同的valueObject

字典是无序的

 

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

}

 

2.block遍历:

 

 

 

 

 

 

 

集合小结:

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