NSSet和NSArray的对比
1.共同点
* 都是集合,都能存放多个多个OC对象
* 只能存放OC对象,不能存放非OC对象类型(基本数据类型:int\char\float\结构体,枚举等)
* 本身都不可变,都有一个可变的子类
2.不同点
* NSArray有顺序,NSSet没有顺序
集合
1.NSArray\NSMutableArray
* 有序
* 快速创建(不可变):@[obj1,obj2,obj3]
* 快速访问元素:数组名[i]
2.NSSet\NSMutableSet
* 无序
3.NSDictionary\NSMutableDictionary
* 无序
* 快速创建(不可变):@{key1 : value1, key2 : value2}
* 快速访问元素:字典名[key]
// 创建
NSSet *s = [NSSet set];
s = [NSSet setWithObject:@"Jack"];// 有一个元素的set
s = [NSSet setWithObjects:@"Jack",@"Rose",@"Jim", nil];// 有多个元素的set
// s = [NSSet setWithSet:set2];// 一个和另一个set一样的set
// s = [NSSet setWithArray:myArray];// 使用一个数组中的元素来创建set
NSSet *s2 = [NSSet setWithObjects:@"Jack",@"Julia",@"Rose",@"Peter", nil];// 定义同时进行初始化
unsigned long num1 = s.count;// 获得元素的个数
id anyObj = [s anyObject];// 获取某个元素
NSLog(@"%@",anyObj);// 访问
// 随机拿出一个元素
NSString *str = [s2 anyObject];
// 创建一个可变数组
NSMutableSet *s3 = [NSMutableSet set];
// 添加元素
[s3 addObject:@"Jack"];
// 删除元素
[s3 removeObject:@"Jack"];
// 元素访问
NSLog(@"%@",s3);
/*
字典:key ---> value
索引 ---> 文字内容
里面存储的东西都是键值对
*/
// 一、创建
NSDictionary *dict1 = [NSDictionary dictionary];// 创建了一个空字典
dict1 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
// 定义同时进行赋值 有一组数据的字典
NSDictionary *dict2 = [NSDictionary dictionaryWithObject:@"Jack" forKey:@"name"];
// 有多组数据的字典:
// 方法一:
NSArray *objArr = @[@"apple",@"banana",@"orange"];
NSArray *keyArr = @[@"red",@"yellow",@"orange"];
NSDictionary *dict3 = dict2 = [NSDictionary dictionaryWithObject:objArr forKey:keyArr];
// 第一个参数是objects数组,第二个是keys数组,二者的内容一一对应
// 方法二
NSDictionary *dict4 = [NSDictionary dictionaryWithObjectsAndKeys:
@"Jack",@"Name",
@"北京",@"Address",
@"26",@"Age",nil];// 对每一组数据,先写value 再写 key,要以nil 结束
// 使用编译器特性快速创建:
NSDictionary *dict5 = @{@"name" : @"Jack",@"address" : @"beijing"};
// 格式:@{key1 : obj1,key2 : obj2,...}; 末尾不用添加nil 注意:这样创建的字典是不可变的字典
// 创建一个和另一个字典相同的字典:
NSDictionary *dict6 = [NSDictionary dictionaryWithDictionary:dict5];
// 二、常用方法
// 1.放回字典含有多少组数据(等于key的个数)
unsigned long num2 = dict5.count;// count是它的属性,返回key的数目
// 2.比较两个字典的内容是否相同
BOOL isEqual = [dict5 isEqualTo:dict6];
// 3.返回所有的keys,返回类型是数组
NSArray *keys = [dict5 allKeys];
// 4.返回所有的objects,返回类型是数组
NSArray *objects = [dict5 allValues];
// 5.找到某个key对应的object
id obj1 = [dict5 objectForKey:@"name"];
// 6.使用编译器特性找到某个key对应的object
id obj2 = dict5[@"name"];// 像数组一样的格式:dict5[key]
// 7.返回某些keys对应的objects
NSArray *objForKeys = [dict5 objectsForKeys:keys notFoundMarker:obj1];
// 8.返回某个object对应的key(可能有多个)
// 返回一个数组,因为一个key只能对应一个value,但是不同的keys可以对应相同的object
NSArray *keysForObj = [dict5 allKeysForObject:@"Jack"];
// 9.把字典的内容写到文件中
// [dict5 writeToFile:/Users/jackxie/Desktop/jack.txt atomically:YES];
// 三、字典的遍历
// 1.经典遍历
// 因为字典不能通过index取出key后者value,可以提前把allKeys取出来放在一个数组中,再进行遍历:
NSArray *keys2 = [dict5 allKeys];
for (int i=0; i<dict5.count; i++) {
NSLog(@"%@ = %@",keys[i],dict5[keys[i]]);
}
// 2.快速遍历
for (id key in dict5)
{
id obj = [dict5 objectForKey:keys];
NSLog(@"%@ = %@",key,obj);
}
// 遍历的是字典的所有keys,因为每一个key都是不同的,根据key可以找到对应的object,但是objext可能是相同的,不能根据object找到唯一对应的key
// 3.Block遍历
[dict5 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
NSLog(@"%@ = %@",key,obj);
}];
// NSMutableDictionary 是NSDictionary的子类,它创建的字典可以添加/修改数据
// 1.添加元素
NSMutableDictionary *md = [NSMutableDictionary dictionary];// 创建一个可变数组
[md setObject:@"stu"forKey:@"stu"];
[md addEntriesFromDictionary:dict5];// 把另一本字典中的所有内容添加到这个字典中
// 2.删除元素
[md removeObjectForKey:@"name"];// 删除这个key对应的这组数据,如果字典中没有这个key,不会报错
[md removeObjectsForKeys:keys];// 删除数组中所有keys对应的数据
// NSLog(@"%@",md); |