您的位置:首页 > 职场人生

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

2014-12-17 10:30 519 查看
------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“];
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  objective c Foundation