-----------android培训、java培训、java学习型技术博客、期待与您交流!------------
-----------并不是生来就是大神、代码量决定一切、其他都是假象、大家都不是傻子对吧?-----------
*************NSArray 排序是有顺序的*********************
NSArray 不可变oc数组
问:为什么要学习oc数组 ?
答:因为他比c语言数组强大 他可以放多种类型的对象,可以将文件内容转换成数组来进行分割或者显示
如何创建数组? oc数组时不能放nil 的 因为他的结束就是nil
注意 总结出来创建方法 NSString stringWithFmat: 类创建方法一般都是用类名开始的 其他类以此类推
//NSArray 创建方式
NSArray *array = [NSArray arrayWithObjects:@"jack",@"rose", nil];
//读取数组的个数
NSLog(@"%ld",array.count);
//打印第一个位置的数组元素
NSLog(@"%@",array[0]);
//快速创建数组
NSArray *array2 = @[@"jack",@"hei",@"hei"];
NSLog(@"%@",array2[2]);
//如何遍历数组里的每个对象
int count = 0;
//遍历数组的每个对象
for(id obj in array2)
{
count++;
}
NSLog(@"%d",count);
//直接打印数组他会打印出所有数组中的元素
NSLog(@"%@",array2);
-----------------------------------------------------------------------------------------
NSMutableArray 可变数组
//创建一个可变数组
NSMutableArray *array = [NSMutableArray arrayWithObjects:@"hack",@"rose", nil];
//增加对象
[array addObject:@"123"];
//删除制定对象
[array removeObject:@"123"];
//删除制定位置的对象
[array removeObjectAtIndex:2];
-----------------------------------------------------------------------------------------
NSMutableSet *set = [NSMutalbeSet setWithObject:@"jack",@"rose",nil]; 无序
//增加元素方法
[set addObject:@"lucy"];
//删除元素只能删除指定元素名称 不能删除指定位置 因为他时无序的
[set removeobject:@"rose"];
----------------------------
// 不可变数组不能使用快速创建
NSMutableArray *array = @[@"ack",@"rose"];
----------------------------
-----------------------------------------------------------------------------------------
总结:NSSet 和NSArray 比较
1>共同点
*都是集合,都能存放oc对象
*只能存放oc对象,不能存放非oc对象类型(基本数据类型:int,char,float等,结构体,枚举)
*本身都是不可变的,都有一个可变的子类
2>不同点
*NSArray 数组元素是有序的
*NSSet 是无序的
NSMutalbeSet 获取方法为
[set anyObject] 获取随机元素 返回NSString类型
NSString *str = [set anyObject];
------------------------------------------------------------------------------------------------
NSDictionary不可变 字典 排列没有顺序的 唯一key 不能有2个相同的key 如何出现后面写的将会覆盖之前写的
如果出现多个key 后面设置的会覆盖之前设置的
字典
问:问什么要学习NSDictionary ?
答:他很方便啦 例如讲 一个人的姓名 年龄 qq号 电话 性别 等等 完全可以利用字典来存储 然后放入NSArray中
搞成一个档案数据库 生活中也有很多例子 例如 在取款机 查询自己余额:他就会立刻显示你有多少钱
例如你查美女的电话号码 输入美女名字 立刻就会出来她的电话 等等 看你自己理解了
这里你要美女的号码 就代表key(索引) 而显示出来的号码入138138就表示value (内容)
他们是配对存在的 称为键值对 格式 一个key(唯一的) 独影一个value
key ---> value 称为键值对
索引 ---> 文件内容
根据索引(key)就能找到对应的内容(value)
创建方法
//第一种方法
NSDictionary *dict = [NSDictionary dictionaryWithObject:@"jack",@"name"];
//第二种方法
NSDictionary *dict = [NSDictionary dictionarywithObject:@"jack,@"name",@"rose",@"name2",nil];
//快捷创建方法只能用在NSDictionary
//格式 @{@"key" : @"value", @"key" : @"value"};返回NSDictionary类型 必要用在NSMutableDictionary
NSdictionary *dict = @{@"name" : @"jack", @"name2" : @"lucy"};
//获取方法 他返回的是id类型
id obj = [dict ObjectForKey:@"name"];
//获取方法2
id obj = dict[@"name"];
----------------------------------------------------------------------------------------------
NSMutableDictionary 可变字典 无序
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增减一个键值对
[d setObject:@"hehe" forKey:@"name2"];
//删除指定key的键值对
[d removeObjectForKey:@"name"];
//获取键值
id obj = d[@"name"];
NSLog(@"%@,%ld",obj,d.count);
//创建字典方法
NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObject:@"jack" forKey:@"name"];
//增加键值对
[d setObject:@"rose" forKey:@"name2"];
[d setObject:@"lucy" forKey:@"name3"];
//遍历之前 先把key 传给数组 然后在 然后通过数组
//数组是有序的 通过数组遍历得到key[i] 然后在读取key[i]得到value
//所以说NSArray和Dictionary是一个很好的组合
NSArray *key = [d allKeys];
for(int i = 0 ; i < d.count ; i++)
{
NSLog(@"%@==%@",key[i],d[key[i]]);
}
//当然直接打印 dictionary 也是可以现实全部内容的
NSLog(@"%@",d);
-----------------------------------------------------
快速遍历方法 无序
NSDictionary *dict = @{@"name" : @"jakc", @"name2" : @"rose", @"name3" : @"lucy"};
//快速遍历方法 无序
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
//打印key 和value
NSLog(@"%@--%@",key,obj);
//停止遍历
//*stop = YES;
}];
集合总结:
1.NSArray\NSMutalbeArray 数组 有序
*有序
*快速创建: @[]; mutalbearray没有快速
*快速读取方法:array[i];
2.NSSet\NSMutalbeSet 数组
*无序
3.NSDictionary\NSMutalbeDictionary字典 键值对 通过key 找到value
*无序
*快速创建(不可变): @{key : value, key2 : value};
*快速读取:字典名[key];
练习:
//创建一个有4个对象的数组
NSArray *person = @[
@{@"name1" : @"jack1" , @"qq1" : @"9821"},
@{@"name2" : @"jack2" , @"qq2" : @"9822"},
@{@"name3" : @"jack3" , @"qq3" : @"9823"},
@{@"name4" : @"jack4" , @"qq4" : @"9824"}
];
//用数组person 得到第二个字典 [2]
NSDictionary * j = person[1];
//打印对象的所有属性
NSLog(@"%@",j);
//利用字典对象读取key 调用value
NSLog(@"%@",j[@"qq2"]);
// 先利用 person[1]对应的指点 然后在用字典取出key对应的数据
NSLog(@"%@",person[1][@"qq2"]);