OC学习(2)-集合

集合的概念

指具有某种特定性质的对象汇总成的集体。这些对象叫集合元素。
比如:整数集{-1,0,1,2}、自然数集{1,2,3,4,5}

  • 特点: 确定性 互异性 无序性

Foundationframework中对象(NSObject)的三种集合
NSSet NSMutableSet 用于对象无序集合(集合)
NSArray NSMutableArray 用于对象有序集合(数组)
NSDictionary NSMutableDictionary 用于键值映射(字典)

注:这些集合类只能容纳cocoa对象(NSOjbect对象)

集合类如何保存基本数据类型

例如:int,float, double, BOOL,struct等。
需要将这些基本数据封装成NSNumber类型进行存储。NSNumber对象是cocoa对象,这样就可以被保存在集合类中。

NSNumber封装对象
  -(NSNumber* )initWithFloat:(float)value;
  -(NSNumber* )initWithDouble:(double)value;
  -(NSNumber* )initWithBool:(BOOL)value ;
  -(NSNumber* )initWithInteger:(NSInteger)value;
NSSet, NSMutableSet

1 集合对象唯一(2个相同对象,无法同时存在)
2 通过hash查询快速,但是无序,杂乱
3 不能确定加入集合后对象的位置
4 数据量大的场合,数据筛选及遍历,建议使用


集合NSSet声明
对象方法-initWithObjects

NSSet * set = [[NSSet alloc] initWithObjects:@"one”, nil];

类方法-Set

NSSet * set = [NSSetSet];

集合NSMutableSet

1 因NSMutableSet继承NSSet,拥有NSSet方法
2 新增修改,删除,追加函数

集合操作
集合的创建
        NSSet *set1 = [NSSet setWithObjects:@"1",@"2", nil];
        NSSet *set2 = [NSSet setWithObjects:@"3",@"4",@"5",@"6", nil];
        NSArray *array = [NSArray arrayWithObjects:@"6",@"7",@"8", nil];
        NSSet *set3 = [NSSet setWithArray:array];
        NSSet *set4 = [NSSet setWithSet:set1];
        NSSet *set5 = [NSSet setWithObjects:@"1",@"2", nil];
        NSSet *set6 = [NSSet setWithObjects:@"1",@"2",@"6",@"7", nil];
返回数量
        NSInteger count = [set3 count];
        NSLog(@"set3 count = %ld",(long)count);
返回任意对象
        NSString *string = [set3 anyObject];
        NSLog(@"string = %@",string);
返回所有对象
        NSArray *objects = [set3 allObjects];
        NSLog(@"objects = %@",objects);
是否包含
        BOOL isContain = [set3 containsObject:@"6"];
        BOOL isContain1 = [set3 containsObject:@"10"];
        NSLog(@"isContain = %d, isContain1 = %d",isContain, isContain1);
集合间是否存在交集
        BOOL isIntersect = [set2 intersectsSet:set3];
        BOOL isInterset1 = [set1 intersectsSet:set2];
        NSLog(@"isItersect = %ld,isItersect1 = %ld",(long)isIntersect,(long)isInterset1);
集合是否匹配
        BOOL isEqual = [set1 isEqualToSet:set2];
        BOOL isEqual1 = [set1 isEqualToSet:set5];
        NSLog(@"isEqual = %ld,isEqual1 = %ld",(long)isEqual,(long)isEqual1);
结合是否是字子集
        BOOL isSub = [set2 isSubsetOfSet:set3];
        bool isSub1 = [set1 isSubsetOfSet:set6];
        NSLog(@"isSub = %ld, isSub1 = %ld",(long)isSub, (long)isSub1);
集合的添加
        NSSet *set7 = [set5 setByAddingObject:@"One"];
        NSLog(@"set7 = %@",set7);
        NSArray *array1 = [NSArray arrayWithObjects:@"two",@"three",@"four", nil];
        NSSet *set8 = [set7 setByAddingObjectsFromArray:array1];
        NSLog(@"set8 = %@",set8);
        NSSet *set9 = [set8 setByAddingObjectsFromSet:set5];
        NSLog(@"set9 = %@",set9);
可变集合
        NSMutableSet *mutableSet1 = [NSMutableSet set];
        NSMutableSet *mutableSet2 = [NSMutableSet setWithObjects:@"1",@"a", nil];
        NSMutableSet *mutableSet3 = [NSMutableSet setWithObjects:@"2",@"a", nil];
        NSMutableSet *mutableSet4 = [NSMutableSet setWithObjects:@"2",@"a",@"b", nil];
        NSMutableSet *mutableSet5 = [NSMutableSet setWithObjects:@"2",@"a",@"b",@"c",@"d", nil];
        NSLog(@"mutableSet1 = %@",mutableSet1);
        NSLog(@"mutableSet2 = %@",mutableSet2);
        NSLog(@"mutableSet3 = %@",mutableSet3);
一个集合减去另一个集合的元素
        [mutableSet2 minusSet:mutableSet3];
        NSLog(@"mutableSet2 = %@",mutableSet2);
两个集合获取交集部分
        [mutableSet2 intersectSet:mutableSet3];
        NSLog(@"mutableSet2 = %@",mutableSet2);
获取两个集合的并集
        [mutableSet2 unionSet:mutableSet3];
        NSLog(@"mutableSet2 = %@",mutableSet2);
一个集合给另一个集合赋值
        [mutableSet1 setSet:mutableSet3];
        NSLog(@"mutableSet1 = %@",mutableSet1);
删除集合中的对象
        NSLog(@"mutableSet4 = %@",mutableSet4);
        [mutableSet4 removeObject:@"b"];
        NSLog(@"mutableSet4 = %@",mutableSet4);
        [mutableSet4 removeAllObjects];
        NSLog(@"mutableSet4 = %@",mutableSet4);
使用数组的方式进行添加对象
        NSLog(@"mutableSet5 = %@",mutableSet5);
        NSArray *array2 = [NSArray arrayWithObjects:@"e",@"f", nil];
        [mutableSet5 addObjectsFromArray:array2];
        NSLog(@"mutableSet5 = %@",mutableSet5);
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,589评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,615评论 3 396
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,933评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,976评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,999评论 6 393
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,775评论 1 307
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,474评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,359评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,854评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 38,007评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,146评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,826评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,484评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,029评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,153评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,420评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,107评论 2 356

推荐阅读更多精彩内容