//集合NSSet
//集合也是儲存對象,和字典一樣也是無序存儲
//集合中里面的元素不能重復
//集合里面的元素可以隨機取出
//用數組放到集合中
NSArray *a10 = @[p1 , p2 , p3 , p4 , p5];
NSSet *set1 = [NSSet setWithArray:a10];
//給集合放一個對象
NSSet *set2 = [NSSet setWithObject:p1];
//給集合放多個對象
//如果集合里面的元素相同了,會覆蓋原來的那個
NSSet *set3 = [NSSet setWithObjects:p1 , p2 , p3 , p4 , nil];
//給集合放集合
NSSet *set4 = [NSSet setWithSet:set2];
NSLog(@"%@" , set4);
// 要打印集合中所有元素, 需要借助數組來完成
// 把集合里面的元素取出來 放大數組里面就可以循環打印
NSArray *array01 = [set3 allObjects];
for (int i = 0; i < [array01 count]; i++) {
NSLog(@"%@" , [array01 objectAtIndex:i]);
}
//既然集合里面的 元素是無序的,那么要想從集合中取出一個元素,這個元素肯定是隨機的
//從集合里面隨機取出一個元素
NSLog(@"*****************************************");
Person *p01 = [set3 anyObject];
NSLog(@"%@" , p01);
//能夠放相同元素的集合
//NSCountedSet 集合中可以放相同的元素,並且能算出一個元素相同了多少次,也就是重復了多少次
NSCountedSet *set5 = [[NSCountedSet alloc] initWithObjects:p1 , p1 , p3 , p4 , p5 , p3 , p3 , p2 , p4 , p2 , nil];
//count 按照種類來分
NSLog(@"%ld" , [set5 count]);
//對集合中某一個元素種類計數
NSLog(@"%ld" , [set5 countForObject:p3]);
//可變集合
NSMutableSet *mset1 = [NSMutableSet setWithObjects:p5 , p3 , p2 , nil];
// 刪除某個元素
[mset1 removeObject:p3];
[mset1 removeAllObjects];//刪除多個元素
NSLog(@"%@" , mset1);
//三大容器總結
/*
一、相同點
都是容器 都能存儲多個元素,存儲的元素都必須是對象
二、不同點
1、特點
數組存儲對象時有序的,元素可以重復
字典存在一一對應關系,鍵值對,key值必須唯一,不能重復
集合存儲的院士是無序的,而且元素之間存在互異性
2、取值方面
數組 通過下標取值
字典 通過鍵值key進行取值
集合 通過anyObject隨機取值
3、能否利用for循環
數組 直接利用for循環
字典 借助allkeys數組進行for循環遍歷
集合 借助一個數組,把set集合中所有元素放進這個數組中
*/
NSArray *array02 = @[p2 , @"a" , p2 , @"b" , p1];
//循環打印數組所有元素,只打印字符串,不打印person對象
//isKindOfClass判斷一個對象是否是某一類,或者這個類的子類
for (int i = 0; i < [array02 count];i++) {
id p = [array02 objectAtIndex:i];
//判斷p是否是NSString類
if ([p isKindOfClass:[NSString class]]) {
// 如果是字符串久打印
NSLog(@"%@" , p);
}
}
//isMemberOfClass判斷一個對象是否是一個類,不會判斷子類
Student *s1 = [[Student alloc] initWithName:@"ddfdfjk" andAge:45];
Student *s2 = [[Student alloc] initWithName:@"dsfu" andAge:456];
NSArray *array03 = @[p2 , s1 , p2 , s2 , p1];
for (int i = 0; i < [array03 count];i++) {
id q = [array03 objectAtIndex:i];
//判斷p是否是NSString類
if ([q isMemberOfClass:[Person class]]) {
// 如果是字符串久打印
NSLog(@"%@" , q);
}
}