zoukankan      html  css  js  c++  java
  • 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
    
    成功的三大原则: 1、坚持 2、不要脸 3、坚持不要脸
  • 相关阅读:
    Java RMI简单例子HelloWorld
    Java RMI远程方法调用
    javascript中通过replace函数搜索和替换指定字符串
    详解公钥、私钥、数字证书的概念
    标准MD5加密算法
    基于Spring Boot构建的Spring MVC快速入门
    http://jinnianshilongnian.iteye.com/blog/1996071
    双11也不要乱买书
    Mybatis 中的转义字符(转帖)
    【Maven】为什么Maven dependencies有的jar包显示为灰色?
  • 原文地址:https://www.cnblogs.com/xulinmei/p/7420089.html
Copyright © 2011-2022 走看看