黑马程序员_OC学习笔记之Foundation框架集合类

OC--集合类

1.OC集合类包括NSArray,NSSet,NSDictionary都是以面向对象的方式操作数组,而且OC数组不像C语言中的数组只能存放同一种数据类型,它可以存放任意类型的对象,但是不能存放非OC对象类型如基本数据类型int,struct,enum等

2.OC数组是以对象的方式存在,因此在创建的时候需要为创建的对象前面加*

3.NSArray数组一旦创建就决定了是不是可变,而且永远是可变或不可变

4.NSArray数组和子类NSMutableArray的基本操作:

1>使用NSArray的类方法arry创建个数组,创建时定义为空数组,那么array数组将永远是空数组

NSArray *array = [NSArray array];

2>创建数组对象有两种方式:

NSArray *array = [NSArray arrayWithObjects:@"Jack",nil];

// 数组中包含了两个NSString对象 nil是用来标识数组元素结束的标识

// 因此OC数组中不能存放空对象

NSArray *array1 = [NSArrayarrayWithObjects:@"Jack",@"Rose", nil];

// 第二种方式:

NSArray *array2 = @[@"Jack",@"Rose"];

// 获取数组的长度 array1.count;

NSUInteger count = [array1 count];

NSLog(@"%ld",count);

// 访问数组中的对象的两种方式

NSString *str1 = [array1 objectAtIndex:0]; //数组中索引为1的对象,OC中提供的方法 返回:Jack

NSString *str2 = array1[0];                //编译器特性其实还是转为上面的形式来访问 返回:Jack

5.遍历数组的三种方式

1>普通方式:

for (int i = 0; i<array1.count; i++)

{

NSLog(@"%@",array1[i]); // 数组中存放的是对象可以用%@输出

if (i ==0)

{

break;

}

}

2>将array1数组中的每个对象拿出来赋给obj然后依次打印

for (id obj in array1)

{    // id obj 代表数组中的对象

// 获取obj对象在数组中的索引

NSUInteger index = [array1 indexOfObject:obj];

NSLog(@"%ld--%@",index,obj);

}

3>使用Block 每次从数组中遍历一个元素后就传递给block,block也相应的执行一次

// block中的id obj对应数组中的元素,NSUInteger idx对应数组中元素的索引 BOOL用来停止遍历

[array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop)

{

NSLog(@"%ld--%@",idx,obj);

// 如果索引为0 立即停止遍历

if (idx ==0)

{

*stop = YES;

}

};

6.NSMutableArray的基本操作:

1>创建可变数组:

NSMutableArray *mutableArray = [NSMutableArray array];

NSMutableArray *mutalbeArray2 = @[@"张三",@"李斯"];  注意:@[]返回的是不可变NSArray数组 这样会报错

  // 为可变数组增加任意对象

Person *person = [[Person alloc] init];

[mutableArray addObject:person];

[mutableArray addObject:@"Jack"];

[mutableArray addObject:@"John"];

// [mutableArray addObject:10]; 数组中不可以存放基本数据类型

// 从数组中删除指定的元素

[mutableArray removeObject:@"John"];

[mutableArray removeObjectAtIndex:0];

// 将数组中的元素全部删除

[mutableArray removeAllObjects];

7.NSSet数组和子类NSMutableSet的基本操作:NSSet和NSArray都是不可变数组,一旦创建就无法改变。NSSet是无序的集合简单操作

1>创建NSSet集合:

NSSet *set = [NSSet set]; // 一旦创建为空永远为空

NSSet *set2 = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim",nil];

// 随机获取NSSet集合中的元素

NSString *str = [set2 anyObject];

NSLog(@"%@",str);

NSMutableSet的简单操作:

// 创建可变set集合

NSMutableSet *mutableSet = [NSMutableSet set];

// 为set添加集合

[mutableSet addObject:@"Jack"];

[mutableSet addObject:@"Rose"];

// 删除元素

[mutableSet removeObject:@"Jack"];

8.NSArray和NSSet数组的对比:

1>都是可以存放任意类型的OC对象的集合,都不能存放基本数据类型

2>本身都是不可变的,但是子类都是可变的

3>NSArray是有序的集合,NSSet是无序的集合

9.NSDictionary和NSMutableDictionary:

1>NSDictionary和它的子类NSMutableDictionary都是以key/value的形式存在,NSDictionary本身为不可变集合

2>NSDictionary也是无序集合

3>字典集合中存储的值是以键值对的形式存在,如果存在相同的key那么后面key的值会被覆盖。但是允许vaule的重复

10.NSDictionary的基本操作

1>常见创建Dictionary集合的四种方式

// 1.创建一个空的字典集合类型

NSDictionary *dic = [NSDictionary dictionary];// 一旦为空 永久为空

// 2.创建只有一组值的字典集合

NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];

// 3.创建多个值的字典集合

NSArray *keys = @[@"name",@"address",@"e-mail"];

NSArray *values = @[@"Jack",@"北京",@"[email protected]m"];

NSDictionary *dic3 = [NSDictionary dictionaryWithObjects:values forKeys:keys];

// 4.通过值/键的方式来创建

NSDictionary *dic4 = [NSDictionary dictionaryWithObjectsAndKeys:

@"Jack",@"name",

@"北京",@"address",

@"[email protected]",@"e-mail",nil];

// 5.类似于数组的创建方式

NSDictionary *dic5 = @{@"name":@"Jack",

@"address":@"北京",

@"e-mail":@"[email protected]"};

// 取值:根据相应的Key取出对应的值

NSString *name = [dic1 objectForKey:@"name"];// 返回 Jack

// 返回键值对的个数

NSUInteger count = dic5.count; // 返回 4

11.遍历NSDictionary数组用两种方式:

1>

NSArray *allKeys = [dic5 allKeys]; // 获取的键在数组中是无序的

for (int i = 0; i < dic5.count; i++)

{

NSString *key = allKeys[i];

NSString *value = dic5[key];

NSLog(@"%@-->%@",key,value);

}

2> 将字典中的键值对传递给Block中的key和obj

[dic5 enumerateKeysAndObjectsUsingBlock:^(idkey, id obj, BOOL *stop)

{

NSLog(@"%@-->%@",key,obj);

     // 遍历一次立即停止 *stop = YES;

};

12.NSMutableDictionary的基本操作:

1>创建可变字典

NSMutableDictionary *mutableDic = [NSMutableDictionary dictionary];

NSMutableDictionary *mutableDic2 [email protected]{@"name",@"Rose",@"address",@"北京"}; 错误的写法因为右边返回的是不可变的字典

2>为可变字典添加元素

[mutableDic setObject:@"Rose" forKey:@"name"];

[mutableDic setObject:@"北京"forKey:@"address"];

3>移除

[mutableDic removeAllObjects];

[mutableDic removeObjectForKey:@"name"];

4>打印

NSLog(@"%@",mutableDic);

黑马程序员_OC学习笔记之Foundation框架集合类,布布扣,bubuko.com

时间: 2024-12-26 12:05:48

黑马程序员_OC学习笔记之Foundation框架集合类的相关文章

黑马程序员-OC学习笔记之Foundation框架NSNumber、NSValue和NSDate

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.NSNumber 前几篇笔记中,小桥复习了Foundatio框架中的几个类,这三个是OC学习的尾声了. 小桥已经复习过OC数组类NSArray,也说过它只能存放OC的对象,对于基本的数据类型确无能为力,但是实际编程中经常要把基本的数据如int.float,结构体存放的OC数组中,怎么办?这里的NSNumber就有用了,它能够把基本数据类型包装成OC对象.

黑马程序员-OC学习笔记之Foundatio框架集合类

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.OC数组 OC数组是一个类,它也分不可变数组NSArray和可变数组NSMutableArray. 1?不可变数组的创建 // 创建一个不可变数组,元素为一个OC字符串对象 @"小桥" NSArray *array1 = [NSArray arrayWithObject:@"小桥"]; // 创建一个不可变数组,元素为多个O

黑马程序员_OC学习笔记之@property和@synthesize

[objc] view plaincopyprint? <span style="font-size:24px;">#import <Foundation/Foundation.h> @interface Person : NSObject { int _age; int age; int _height; int height; int _weight; int weight; int _money; int money; } @property int ag

黑马程序员_OC学习笔记之description方法和sel

OC--description方法 1.Description方法包括类方法和对象方法.(NSObject类所包含) -description(对象方法) 2.使用NSLog和@%输出某个对象时,会调用对象的description方法,并拿到返回值进行输出. +description(类方法) 3.使用NSLog和@%输出某个对象时,会调用类对象的description方法,并拿到返回值进行输出,把整个对象一次性打印出来,打印对象使用%@. 4.使用@%打印对象如(“@%”,P)默认打印输出为<

黑马程序员-OC学习笔记之ARC

---------------------- IOS开发.Android培训.期待与您交流! ----------------------一.什么是ARC        ARC是自动引用计数,苹果官方在Xcode4.2及以后版本中加入的一个内存管理机制,完全取代了程序员人工的内存管理,使得程序员只须关心程序本身.使用ARC,编译器会自动在代码中加入内存管理代码,是一个编译器特性,而不是运行时特性,当然,它也和JAVA的垃圾回收不同,它的本质和手动的内存管理是一样的,只是这些代码编译器会自动添加.

黑马程序员-OC学习笔记之autorelease与自动释放池

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.autorelease autorelease与release相似,是OC中的一个对象方法.这两个方法都能把对象的引用计数器减1,但是release是一个精确的减1,对对象的操作只能在release之前进行,如果是在之后,就会出现野指针错误:而autorelease是一个不精确的引用计数器减1,当给对象发送autorelease消息时,对象就会被放到自动

黑马程序员-OC学习笔记之block

过山车 Time Limit: 1000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 9426    Accepted Submission(s): 4151 Problem Description RPG girls今天和大家一起去游乐场玩,终于可以坐上梦寐以求的过山车了.可是,过山车的每一排只有两个座位,而且还有条不成文的规矩,就是每个女生必须找个个男生做par

黑马程序员-C学习笔记之预处理指令

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.什么是预处理指令 预处理指令是告诉编译器在编译之前预先处理的一些指令,有宏定义,文件包含,条件编译. 预处理指令一般以 # 号开头,可以出现在文件的任何地方,作用于整个文件. 二.宏定义 宏定义分不带参数的和带参数的宏定义.     1?不带参数的宏定义 #import <stdio.h> #define AGE 10 // 宏名用大写 int ma

黑马程序员-C学习笔记之scanf

---------------------- IOS开发.Android培训.期待与您交流! ---------------------- 一.scanf函数介绍 这也是在stdio.h中声明的一个函数,因此使用前必须加入#include<stdio.h>.调用scanf函数时,需要传入变量的地址作为参数,scanf函数会等待标准输入设备(比如键盘)输入数据,并且将输入的数据赋值给地址对应的变量. 函数原型为:int scanf(const char*format,...); 二.scanf用