ios NSSet / NSMutableSet

NSSet: 集合

集合:无序,没有重复元素的数组,(元素相同只保留一个)

1. 创建:(3种)
NSSet *set1 = [NSSet setWithObjects:@"one",@"tow",@"three",@"one",@"tow", nil];  //标准创建方法
NSSet *set2 = [NSSet setWithSet:set1]; // 副本创建
NSArray *array = @[@"six",@"six"]; 
NSSet *set3 = [NSSet setWithArray:array];  //用数组来创建元素,也会过滤重复元素
2. 自定义类防止重复:
//自定义类的对象,不会过滤重复元素,需要在自定义类中冲重写粗滤与细滤方法
NSSet *set1 = [NSSet setWithObjects:stu1, stu2 ,stu3 ,stu4, nil];   
 //初始化的时候就调用过滤方法

过滤方法重写:
//过滤重复元素 (格式)
-(NSUInteger)hash{ //粗滤
    return self.age; //数值型数据不同,认为2个对象就是不同的     //无数值型属性的时候return YES; 不会调用此方法
}
-(BOOL)isEqual:(id)object{ //细滤 ,仅在粗滤过滤相同时才调用
    if (self == object) {
        return YES; //YES表示重复
    }
    if ([object isMemberOfClass:[TRStudent class]] == YES) { //TRStudent表示类,不同类就要改写,也可以改为 [self class] 就不要该了,直接当格式使
        TRStudent *s = object;
        if ([self.name isEqualToString:s.name]==YES && self.age == s.age) {
            return  YES;
        }
    }
    return NO; //表示没有重复
}

NSObject里面的过滤方法:
-(NSUInteger)hash{
    return YES; 
}
-(BOOL)isEqual:(id)object{ 
  if (self == object) {
        return YES; //YES表示重复
    }
}
3. 判断方法:
判断集合中是否有指定元素:
[set1 containsObject:@"tow"] //返回布尔值
判断2个集合是否相等:
[set1 isEqualToSet:set2] //返回布尔值
判断子集:
[set4 isSubsetOfSet:set1] //返回布尔值
4. 集合与数组的相互转换:
集合转换为数组:
NSArray *array1 = [set1 allObjects]
数组转换为集合:
NSSet *set3 = [NSSet setWithArray:array];
5. 遍历集合:(4种)
//准遍历,无条件遍历
        NSLog(@"%@", set);  

//面向过程的循环:集合遍历要将它转为数组
        NSArray *a = [set1 allObjects];
        for (int i=0; i<a.count; i++) {
           // NSLog(@"%@", set1[i]);
            //NSLog(@"%@", [set1 objectAtIndex:i]);
             NSLog(@"%@", a[i]);
        }

//面向对象的循环,遍历数组
        for (NSString *str in set1) {
           if ([str isEqualToString:@"one"] == YES) {
                  NSLog(@"%@",str);
            }
        }

 //枚举器遍历
        NSEnumerator *e = [set1 objectEnumerator]; //objectEnumerator  NSSet类中的方法
        NSString *str;
        while (str = [e nextObject]) { // nextObject  //获取元素给str  NSEnumerator类中的方法
            NSLog(@"%@", str);
        }

NSMutableSet:

可变集合,NSSet的子集

1. 创建:(3)
NSMutableSet *set1 = [NSMutableSet set]; //工厂方法,空集合,有意义
NSMutableSet *set2 = [NSMutableSet setWithCapacity:100]; //预估值,在没有到100的时候扩充效率比较高
NSMutableSet *set3 = [NSMutableSet setWithObjects:@"one", @"tow",@"three", nil];//是重写了setWithObjects:,所以是在堆上面创建对象,// 此方法也调用粗滤与细滤过滤重复元素
2. 添加元素:(2)(在添加的时候都会调用粗滤与细滤过滤重复元素)
[set3 addObject:@"one"];// 添加一个元素
 NSArray *added = @[@"five", @"six"]; [set3 addObjectsFromArray:added]; //添加多个元素,要用数组来添加
NSString提供了过滤方法
3. 删除方法:(2)
[set3 removeObject: @"one"]; //删除指定元素
[set3 removeAllObjects]; //删除全部元素
3. 运算方法:
交集:
[set2 intersectSet:set3]; //结果被放到了set2
并集:
[set2 unionSet:set3]; //结果被放到了set2
删除交集部分:
[set2 minusSet:set3];  //结果被放到了set2

转载于:https://www.cnblogs.com/xulinmei/p/7420089.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值