Objective-C语法之NSSet和NSMutableSet

来源:互联网 发布:网络暴力 电影 国产 编辑:程序博客网 时间:2024/05/16 05:43

NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性。当插入相同的数据时,不会有任何效果。从内部实现来说是hash表,所以可以常数时间内查找一个数据。


1、NSSet的使用

[NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造
[NSSet setWithArray:(NSArray *)array];用数组构造
[NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志。
[set count] ; 得到这个结合对象的长度。
[set containsObject:...]: 判断这个集合中是否存在传入的对象,返回Bool值。
[set objectEnumerator]: 将集合放入迭代器。
[enumerator nextObject]:得到迭代器中的下一个节点数据,使用while遍历这个迭代器,方可遍历集合对象中的对象。
[set isEqualToSet:objset]:判断两个集合是否完全相等,返回Bool值。
[set isSubsetOfSet:objset]:判断集合中的所有数据是否都相等与objeset集合中,返回Bool值。
[set allObjects];

示例代码:

1.1 以NSArray构造set

 NSArray *array = [[NSArray alloc] initWithObjects:@"对象abc",@"rongfzh", @"totogo2010",nil];        NSSet *set3 = [NSSet setWithArray:array];        NSLog(@"%@", set3);

打印:

2012-07-10 09:39:02.015 objectiveC[720:403] {(    rongfzh,    "\U5bf9\U8c61abc",    totogo2010)}

1.2 set的一些比较方法的使用。

int main(int argc, const char * argv[]){    @autoreleasepool {        NSSet *set = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",nil];        NSSet *set1 = [NSSet setWithObjects:@"25",@"age",@"张三",@"name",@"男",@"性别",nil];                NSLog(@"set count:%lu", [set count]);        //判断是否含有age字符串        if([set containsObject:@"age"]) {            NSLog(@"set包含age");        }        //判断set 是否等于set1        if ([set isEqualToSet:set1]) {            NSLog(@"set 等于 set1");        }        //判断set是否是否是set1的子集合        if ([set isSubsetOfSet:set1]) {            NSLog(@"set isSubsetOfSet set1");        }        //获取所有set对象        NSArray *array = [set allObjects];        NSLog(@"array:%@", array);                //迭代遍历        NSEnumerator *enumerator = [set objectEnumerator];        for (NSObject *object in enumerator) {            NSLog(@"set1里的对象:%@", object);        }    }    return 0;}

打印结果:

2012-07-10 09:50:32.018 objectiveC[939:403] set count:52012-07-10 09:50:32.020 objectiveC[939:403] set包含age2012-07-10 09:50:32.021 objectiveC[939:403] set isSubsetOfSet set12012-07-10 09:50:32.023 objectiveC[939:403] array:(    age,    25,    "\U7537",    "\U5f20\U4e09",    name)2012-07-10 09:50:32.027 objectiveC[939:403] set1里的对象:age2012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:252012-07-10 09:50:32.028 objectiveC[939:403] set1里的对象:男2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:张三2012-07-10 09:50:32.029 objectiveC[939:403] set1里的对象:name

2、NSMutableSet的使用

NSMutableSet继承NSSet,它可以使用NSSet的方法。

[NSMutableSet setWithCapacity:6]:创建可变集合对象,并且初始化长度为6。
[set addObject: obj] : 向集合中动态的添加对象。
[set removeObject:obj]:删除集合中的一个对象。
[set removeAllObjects]:删除集合中的所有对象。
[set unionSet:obj]:向集合中添加一个obj集合的所有数据。
[set minusSet:obj]:向集合中删除一个obj集合的所有数据。
[set intersectSet]:向集合中删除一个不包含obj集合的所有数据。

示例代码:

int main(int argc, const char * argv[]){    @autoreleasepool {        NSMutableSet *muSet = [NSMutableSet setWithCapacity:6];        [muSet addObject:@"对象1"];        NSSet *set = [NSSet setWithObjects:@"对象2",@"对象3", @"被企鹅咬了一口", nil];        //添加set数据        [muSet unionSet:set];        for (NSObject *object in muSet) {            NSLog(@"all nuSet:%@",object);        }        NSSet *set1 = [NSSet setWithObjects:@"对象2",@"对象3", nil];                //在muSet中删除包含set1总数据        [muSet minusSet:set1];        for (NSObject *object in muSet) {            NSLog(@"after minusSet:%@",object);        }                }    return 0;}

打印结果:

2012-07-10 10:09:08.194 objectiveC[1156:403] all nuSet:对象12012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:被企鹅咬了一口2012-07-10 10:09:08.196 objectiveC[1156:403] all nuSet:对象22012-07-10 10:09:08.197 objectiveC[1156:403] all nuSet:对象32012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:对象12012-07-10 10:09:08.198 objectiveC[1156:403] after minusSet:被企鹅咬了一口

著作权声明:本文由http://blog.csdn.net/totogo2010/原创,欢迎转载分享。请尊重作者劳动,转载时保留该声明和作者博客链接,谢谢!

原创粉丝点击
热门问题 老师的惩罚 人脸识别 我在镇武司摸鱼那些年 重生之率土为王 我在大康的咸鱼生活 盘龙之生命进化 天生仙种 凡人之先天五行 春回大明朝 姑娘不必设防,我是瞎子 三星s8屏幕坏了怎么办 手机挤压漏液了怎么办 三星显示器跳白色线条怎么办动 三星s6屏幕漏液怎么办 三星电视曲面屏碎了怎么办 平板摔了花屏怎么办 新手机开不了机怎么办 三星a9屏幕漏液怎么办 小米note后面玻璃碎了怎么办 换手机微信钱包怎么办 内外屏一体手机屏幕碎了怎么办 苹果手机显示屏坏了怎么办 华为手机屏裂了怎么办 乐视手机屏坏了怎么办 红米手机触屏失灵怎么办 小米4排线断了怎么办 红米3x屏幕难点怎么办 华为p7屏幕不亮怎么办 红米5外屏碎了怎么办 小米电视碎屏了怎么办 oppo手机第二屏幕打不开怎么办 红米note3屏幕裂了怎么办 小米3屏幕烂了怎么办 苹果x屏幕触屏不灵怎么办 票买好了身份证丢了怎么办 广发信用卡身份证到期了怎么办 人在外地身份证丢了怎么办 人在国外身份证丢了怎么办 身份证丢了户口本不在怎么办 在北京身份证过期了怎么办 没社保卡怎么办厦门健康卡 扬州市民卡丢了怎么办 扬州市民卡坏了怎么办 重庆社保卡坏了怎么办 社保卡丢了看病怎么办 社保卡丢了买药怎么办 常州社保卡丢了怎么办 深圳社保卡掉了怎么办 上海医保卡丢了怎么办 户口转到西安后医保怎么办 上海医保卡掉了怎么办