1.不可变数据字典(NSDicionary)
字典:用来存储具有一一对应关系的数据.
一个key 对应一个 value ,key起到了唯一标示的作用,key必须是唯一的,但是一个vlaue可以对应多个key.
字典存储的是无序的元素,一对键值对组成了字典中的一个元素.
①.不可变字典初始化赋值
<span style="font-size:18px;">
//笑笑语法
NSDictionary *dic = @{@"name":@"zhangdan",@"age":18,@"gender":@"man"};
//初始化
NSDictionary *dictionary = [[NSDictionary alloc] initWithObjectsAndKeys:
@"放弃",@"abandon",@"对象",@"object",@"索引",@"index", nil];
NSLog(@"%@",dictionary);
//遍历构造器方法
NSDictionary *dictionary1 = [NSDictionary dictionaryWithObjectsAndKeys:
@"xiaozang",@"name",@"18",@"age",@"23342432",@"phone",nil];
NSLog(@"%@",dictionary1);
</span>
②.求字典元素个数,即获取所有的key和value
<span style="font-size:18px;">
//获取元素的个数
NSUInteger num = [dictionary1 count];
NSLog(@"%ld",num);
//获取所有的key
for (NSString *temp in [dictionary1 allKeys] ) {
NSLog(@"%@",temp);
}
NSArray *array = [dictionary1 allKeys];
NSLog(@"%@",array);
//根据key获取对应的value
NSString *value = [dictionary1 objectForKey:@"age"];
</span>
③.遍历字典:取得key,和value
<span style="font-size:18px;">
//字典遍历:取得的是key,然后根据key再获取对应的value
for (NSString *temp in [dictionary1 allKeys] ) {
NSString *value = [dictionary1 objectForKey:temp];
NSLog(@"%@ = %@",temp,value);
}
</span>
④.其他一些操作
<span style="font-size:18px;">//1.判断是否和另一个字典相同
- (BOOL)isEqualToDictionary:(NSDictionary *)otherDictionary;
//2.同过字典中所有的vlaue给所有的keys排序,用到block语法.
- (NSArray *)keysSortedByValueUsingComparator:(NSComparator)cmptr
</span>
2.可变字典(NSMutableDictionary)
可变字典继承不可变字典,继承不可变字典内的方法,同时增加了删除,添加,修改操作.
①.创建字典对象,初始化赋值操作
<span style="font-size:18px;">
//笑笑语法
NSMutaleDicrtionary *mut = [@{@"name":@"zhangdan",@"age":12} mutableCopy];
//初始化
NSMutableDictionary *mutable = [[NSMutableDictionary alloc] init];
//便利构造器方法
NSMutableDictionary *mutable = [NSMutableDictionary dictionaryWithCapacity:1];
//便利构造器创建对象方法
NSMutableDictionary *mutable1 = [NSMutableDictionary dictionaryWithObjectsAndKeys:
@"21",@"age",@"asdf",@"name",nil]; NSLog(@"%@",mutable1);</span><p><span style="font-size:18px;">
</span></p><span style="font-size:18px;">
</span>
②向可变数据字典中,添加,删除,修改元素
<span style="font-size:18px;">
//往字典中添加元素.
[mutable setObject:@"13" forKey:@"age"];
NSLog(@"%@",mutable);
//根据key删除对应的元素
[mutable removeObjectForKey:@"age"];
NSLog(@"%@",mutable);
//修改key对应的value
[mutable setObject:@"1sad8" forKey:@"age"];
NSLog(@"%@",mutable);
[mutable setValue:@"17" forKey:@"age"];
//移除所有的元素
[mutable removeAllObjects];
//将字典中原来的元素替换为另一个字典中的元素
[mutable setDictionary:otherDictionary];
//快速根据key取出对应的value;
NSString *s1 = dictionary[@"name"];//[dictionary objectForKey:@"name"]
NSLog(@"%@",s1);
NSString *s2 = dictionary[@"age"];
NSLog(@"%@",s2);
</span>
3,集合(NSSet和NSMutableSet)
1).集合:无序,不能添加重复元素
2).可变集合是不可变集合的子类,包含父类的所有方法,同时可变集合增加了删除,修改,添加操作.
①不可变集合常见操作.
<span style="font-size:18px;">
//初始化方法
NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil];
//便利构造器方法
NSSet *set = [[NSSet alloc] initWithObjects:@"aa",@"dd",nil];
<span style="font-size:18px;"> //计算元素个数 NSUInteger num = [set count]; NSLog(@"%ld",num); NSLog(@"%@",set);
//获取集合中的元素 NSLog(@"%@",[set anyObject]);
//快速遍历 for (NSString *temp in set) { NSLog(@"%@",temp); }
//判断集合是否包含某对象
BOOL isContain = [set containsObject :@"dd"];
//判断两个集合是否相同
- (BOOL)isEqualToSet:(NSSet *)otherSet;
//判断集合中的子串是否和传入的相同,
- (BOOL)isSubsetOfSet:(NSSet *)otherSet;
</span>
</span>
②.可变集合操作
<span style="font-size:18px;">
//创建对象
NSMutableSet *set = [NSMutableSet setWithObjects:@"aa",@"bb",@"cc",@"dd",nil];
NSMutableSet *set1 = [NSMutableSet setWithCapacity:1];
<span style="font-size:18px;"> //添加
[set addObject:@"rrr"]; NSLog(@"%@",set);
//删除
[set removeObject:@"aa"]; NSLog(@"%@",set);
//删除所有
[set removeAllObjects]; NSLog(@"%@",set);
//添加集合中的元素,通过数组
[set addObjectsFromArray:array];
//将集合中的元素替换成另一个集合的元素
[set setSet:otherSet];4.NSCountedSet</span></span><p><span style="font-size:18px;"> NSCountedSet的父类是NSMutableSet,所以继承了NSset和NSMutableSet里面的方法.</span></p>
常见操作
<span style="font-size:18px;"> NSCountedSet *countSet = [NSCountedSet setWithObjects:
@"aa",@"bb",@"cc",@"dd",@"ee",@"aa",nil];
//数组中的重复个数
NSCountedSet *count = [[NSCountedSet alloc] initWithCapacity:1];
<span style="font-size:18px;"> NSUInteger count = [countSet countForObject:@"aa"]; NSLog(@"%ld",count);</span>
</span>
//添加元素
- (void)addObject:(id)object;
//移出对象
- (void)removeObject:(id)object;
例题:有100个数,每个数取值范围为20 - 55 ,找出其中重复的数,重复次数.
<span style="font-size:18px;">
NSCountedSet *countSet = [NSCountedSet setWithCapacity:100];
for (int i = 0;i < 100; i++) {
int random = arc4random() % (55 - 22 + 1) + 20;
printf("%d ",random);
[countSet addObject:@(random)];
}
for (NSNumber *num in countSet) {
NSUInteger count = [countSet countForObject:num];//记录重复的次数.
if (count > 1) {
NSLog(@"%d,重复次数为%ld",[num intValue],count);
}
}
</span>
总结:字典,集合.数组.的相同点和不同点
<span style="font-size:18px;"> /**
*
* 相同点:都属于collection(集合),用来存储多个对象,并不限制对象的类型
* 不同点:
* 1.作用:
* 数组管理有序的集合
* 字典管理具有一一对应关系的数据集合
* 集合管理无序并且互异性的元素的集合.
* 2.特点
* 数组:有序,并且元素可以重复.
* 字典:无序,每一个元素都是一对键值对,一个key只能对应一个value,但是一个value可以对应多个key,key是唯一的.
* 集合:无序,互异性(元素不能重复,但会记录重复次数.)
* 3.取值方式:
* 数组:通过下标获取对应元素.
* 字典:通过key获取对用的value.
* 集合:随机取值.anyObject,集合的效率最大化.
* 4.快速遍历:for in遍历时不能修改遍历的集合
* 数组:遍历出来的时数组中的元素
* 字典:遍历出来的是字典中的key,通过key,取出对应的value值.
* 集合:遍历出集合中的元素.
* 5.创建对象的方法 1.初始化方法 2.便利构造器
* 数组 : initWithObjects: arrayWithObjects:
* 字典 : initWithObjectsAndKeys: dictionaryWithObjectsAndKeys:
* 集合 : initWithObjects: setWithObjects:
*/
</span>