IOS集合NSSet与NSMutableSet知识点

NSSet在实际应用中与NSArray区别不大,但是如果你希望查找NSArray中的某一个元素,则需要遍历整个数组,效率低下。而NSSet在查找某一特定的元素的时候则是根据hash算法直接找到此元素的位置,效率高。 NSSet是一个无序的,管理对个对象的集合类,最大特点是集合中不允许出现重复对象,和数学上的集合含义是一样的。除了无序,不许重复,其他功能和NSArray是一样的;需要注意的是:NSSet,NSArray里面只能添加cocoa对象,如果需要加入基本数据类型(int,float,BOOL,double等),需要将数据封装成NSNumber类型。主要是一些常见的操作,别外一些操作见其相应的文档,下面的代码部分还运用的第三方插件BlocksKit相结合;

1:NSSet一些常见的操作

NSSet *newSet=[NSSet setWithObjects:@"wujy",@"cnblogs",@"age",nil];
    NSLog(@"set的个数为:%ld",[newSet count]);

    //不会按上面增加的顺序输入 所以NSSET是没有顺序
    NSEnumerator *enumeratorset=[newSet objectEnumerator];
    for (NSObject *obj in enumeratorset) {
        NSLog(@"key为:%@",obj);
    }

    //是否存在
    BOOL isExict=[newSet containsObject:@"wujy"];
    NSLog(@"是否存在:%d",isExict);

    //返回任意一个元素
    NSString *anyObje=[newSet anyObject];
    NSLog(@"返回任意一个元素:%@",anyObje);

    //判断是否包含这个元素 并还回
    NSObject *memberObj=[newSet member:@"age"];
    if (memberObj) {
        NSLog(@"存在元素(age):%@",memberObj);
    }

    //简便创建nsset
    NSSet *twoSet=[[NSSet alloc] initWithArray:@[@2,@10,@12,@"wujy"]];

    //判断两个nsset是否相等
    BOOL isEaual=[newSet isEqualToSet:twoSet];
    NSLog(@"判断两个nsset是否相等(0):%d",isEaual);

    //判断两个nsset是否交集
    BOOL isInterSects=[newSet intersectsSet:twoSet];
    NSLog(@"判断两个nsset是否交集(1):%d",isInterSects);

    //Blocks

    NSSet *blockSet=[[NSSet alloc]initWithObjects:@1,@2,@3,@4,@5,@6,nil];
    //遍历
    [blockSet bk_each:^(id obj) {
        NSLog(@"block遍历的值为:%@",obj);
    }];

    //过滤
    NSSet *selectSet=[blockSet bk_select:^BOOL(id obj) {
        BOOL select=[obj intValue]>3?YES:NO;
        return select;
    }];
    NSLog(@"过滤后的nsset(6,5,4):%@",selectSet);

    //过滤 只在第一个符合条件时就停止
    NSSet *matchSet=[blockSet bk_match:^BOOL(id obj) {
        BOOL select=[obj intValue]<4?YES:NO;
        return select;
    }];
    NSLog(@"matchSet过滤后的nsset(3):%@",matchSet);

    //取反过滤
    NSSet *rejectSet=[blockSet bk_reject:^BOOL(id obj) {
        BOOL select=[obj intValue]<4?YES:NO;
        return select;
    }];
    NSLog(@"取反过滤后的nsset(6,5,4):%@",rejectSet);

    //对各个项进行处理
    NSSet *mapSet=[blockSet bk_map:^id(id obj) {
        return @([obj intValue]+1);
    }];
    NSLog(@"修改后的值为(7,3,6,2,5,4):%@",mapSet);

    //是否符合条件 返回bool
    BOOL isSelected=[blockSet bk_any:^BOOL(id obj) {
        BOOL select=[obj intValue]>3?YES:NO;
        return select;
    }];
    NSLog(@"%d符合条件1",isSelected);

    //判断是否所有的项都符合这个条件
    BOOL allSelected=[blockSet bk_all:^BOOL(id obj) {
        BOOL select=[obj intValue]>2?YES:NO;
        return select;
    }];
    NSLog(@"%d符合条件0",allSelected);

    //判断是否所有的项都不符合这个条件
    BOOL noneSelected=[blockSet bk_none:^BOOL(id obj) {
        BOOL select=[obj intValue]>50?YES:NO;
        return select;
    }];
    NSLog(@"%d符合条件1",noneSelected);

2:NSMutableSet一些常见的操作

    //创建
    NSMutableSet *mutableSet=[[NSMutableSet alloc]initWithCapacity:5];
    [mutableSet addObject:@1];
    [mutableSet addObjectsFromArray:@[@2,@3,@4]];
    NSLog(@"增加后的NSMutableSet(3,2,1,4):%@",mutableSet);

    //把nsset增加进去
    [mutableSet unionSet:[NSSet setWithObjects:@5,@6,nil]];
    NSLog(@"增加后的NSMutableSet(3,6,2,5,1,4):%@",mutableSet);

    //去除元素
    [mutableSet removeObject:@5];
    NSLog(@"去除后的元素(3,6,2,1,4):%@",mutableSet);

    //删除nsset里面的
    [mutableSet minusSet:[NSSet setWithObjects:@1,@2,nil]];
    NSLog(@"去除后nsset的元素(3,6,4):%@",mutableSet);

    //nsset转化成nsmutableset
    NSSet *newSet=[NSSet setWithObjects:@10,@11,@12, nil];
    NSMutableSet *newMutableSet=[NSMutableSet set];
    [newMutableSet setSet:newSet];
    NSLog(@"转换后的mutableset值为(12,10,11):%@",newMutableSet);

    //Blocks
    //过滤
    NSMutableSet *blockMutableSet=[[NSMutableSet alloc]initWithObjects:@20,@23,@25,nil];
    [blockMutableSet bk_performSelect:^BOOL(id obj) {
        BOOL select=[obj intValue]>22?YES:NO;
        return select;
    }];
    NSLog(@"过滤后的nsmutableset(25,23):%@",blockMutableSet);

    //取反过滤
    [blockMutableSet bk_performReject:^BOOL(id obj) {
        BOOL select=[obj intValue]>24?YES:NO;
        return select;
    }];
    NSLog(@"取反过滤后的nsmutableset(23):%@",blockMutableSet);

    //对项进行修改
    [blockMutableSet bk_performMap:^id(id obj) {
        return @([obj intValue]+1);
    }];
    NSLog(@"修改后的nsmutableset(24):%@",blockMutableSet);

3:指数集合(索引集合)NSIndexSet

//指数集合(索引集合)NSIndexSet
 NSIndexSet * indexSet = [[NSIndexSet alloc] initWithIndexesInRange:NSMakeRange(1, 3)]; //集合中的数字是123

//根据集合提取数组中指定位置的元素
NSArray * array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four", nil];
NSArray * newArray = [array objectsAtIndexes:indexSet]; //返回@"two",@"three",@"four"

//可变指数集合NSMutableIndexSet
NSMutableIndexSet *indexSet = [[NSMutableIndexSet alloc] init];
[indexSet addIndex:0]
[indexSet addIndex:3];
[indexSet addIndex:5];
//通过集合获取数组中指定的元素
NSArray *array = [[NSArray alloc] initWithObjects:@"one",@"two",@"three",@"four",@"five",@"six", nil];
NSArray *newArray = [array objectsAtIndexes:indexSet]; //返回@"one",@"four",@"six"
时间: 2024-10-06 00:35:13

IOS集合NSSet与NSMutableSet知识点的相关文章

OC中NSDictionary(字典)、NSMutableDictionary(可变字典)、NSSet(集合)、NSMutableSet(可变集合)得常用方法

字典用于保存具有映射关系数据的集合 一个key—value对认为是一个条目(entry),字典是存储key—value对的容器 与数组不同,字典靠key存取元素 key不能重复,value必须是对象 键值对在字典中是无序存储的 字典分:不可变字典(NSDictionary)和可变字典(NSMutableDictionary) 不可变字典一旦创建,键值对就不可更改,不可添加,不可删除,仅能读取key或者value 常用方法有: 1.创建字典对象 2.获取所有key值,获取所有value值 3.通过

OC中的集合NSSet

1 集合NSSet(无序) 2 本质上是哈希表,采用散列算法来查找 3 每个元素只有一次,元素是无序的 4 5 创建 每个元素可以是任意的对象 6 NSSet *set=[[NSSet alloc] initWithObjects:@"one",@"two", 7 @"three",@"four",nil]; 8 NSSet *set2=[[NSSet alloc] initWithObjects:@"one&quo

NSSet和NSMutableSet 确保数据的唯一性--备

NSSet和NSMutableSet是无序的, 但是它保证数据的唯一性.当插入相同的数据时,不会有任何效果.从内部实现来说是hash表,所以可以常数时间内查找一个数据. 1.NSSet的使用 [NSSet setWithSet:(NSSet *)set]; 用另外一个set对象构造[NSSet setWithArray:(NSArray *)array];用数组构造[NSSet setWithObjects:...]:创建集合对象,并且初始化集合中的数值,结尾必需使用nil标志.[set cou

[Objective-C] 010_Foundation框架之NSSet与NSMutableSet

在Cocoa Foundation中的NSSet和NSMutableSet ,和NSArray功能性质一样,用于存储对象属于集合.但是NSSet和NSMutableSet是无序的, 保证数据的唯一性,当插入相同的数据时,不会有任何效果. NSSet 初始化及常用操作 #import "AppDelegate.h" @interface AppDelegate () @end @implementation AppDelegate - (BOOL)application:(UIAppli

黑马程序员——Foundation学习笔记(NSSet和NSMutableSet)

==========android培训.ios培训.java培训.期待与您交流========== 一.NSSet: NSSet NSSet里面存储的元素没有顺序,NSArray中的元素有顺序. NSSet *s = [NSSet set]; // 创建一个空的Set,永远是空,不可变. NSSet *s2 = [NSSet setWithObjects:@"jack",@"rose",nil]; NSString *str = [s2 anyObject]; //

NSSet、NSMutableSet

NSSet和NSArray功能性质一样,用于存储对象,属于集合:只能添加cocoa对象,基本数据类型需要装箱. NSSet . NSMutableSet是无序的集合,在内存中存储方式是不连续的,而NSArray是有序集合,在内存中存储位置是连续的. NSSet和我们常用NSArry区别是:在搜索一个元素时NSSet比NSArray效率高,主要是它用到了一个算法hash(哈希).比如你要存储元素A,一个hash算法直接就能直接找到A应该存储的位置:同样,当你要访问A时,一个hash过程就能找到A存

NSSet、NSMutableSet基本用法

郝萌主倾心贡献,尊重作者的劳动成果,请勿转载. 如果文章对您有所帮助,欢迎给作者捐赠,支持郝萌主,捐赠数额随意,重在心意^_^ 我要捐赠: 点击捐赠 Cocos2d-X源码下载:点我传送 游戏官方下载:http://dwz.cn/RwTjl 游戏视频预览:http://dwz.cn/RzHHd 游戏开发博客:http://dwz.cn/RzJzI 游戏源码传送:http://dwz.cn/Nret1 在Foundation框架中,提供了NSSet类,它是一组单值对象的集合,且NSSet实例中元素

学习IOS开发UI篇--UI知识点总结(四) UITabelView/UITableViewCell

UITabelView:常用属性 @property (nonatomic)          CGFloat    rowHeight;             // will return the default value if unset @property (nonatomic)          CGFloat     sectionHeaderHeight;   // will return the default value if unset @property (nonatom

学习IOS开发UI篇--UI知识点总结(三) UIScrollView/UIPageControl/NSTimer

UIScrollView:常用属性 @property(nonatomic)   UIEdgeInsets     contentInset;               // default UIEdgeInsetsZero. add additional scroll area around content @property(nonatomic,getter=isPagingEnabled) BOOL   pagingEnabled;     // default NO. if YES,