oc NSdictionary / NSSet / NSCountedSet / 快速遍历 / NSEnumerator

来源:互联网 发布:wkwebview 加载本地js 编辑:程序博客网 时间:2024/05/17 14:28


#import <Foundation/Foundation.h>
#import "Student.h"

int main(int argc, const char * argv[]) {
    @autoreleasepool {
        //1、字典元素是以key : value存储的。
        //2、字典中的元素存放是无序的。
        //3、字典中存取值通过key值。
        //4、字典中的key值不允许重复,但是value值是可以重复的。
        //5、字典有可变和不可变之分。
        //注意:如果,一旦key值有重复的,会自动放弃后面重复的,只保留遇到的第一个key-value对

        NSArray *arrayName=@[@"zhouyi",@"bella",@"jinke"];
        NSArray *arrayKey=@[@"name1",@"name2",@"name3"];
        NSDictionary *dic1=[[NSDictionary alloc]initWithObjects:arrayName forKeys:arrayKey];
        
      
        
        NSDictionary *dic2=[[NSDictionary alloc]initWithObjectsAndKeys:@"obj1",@"key1",@"obj2",@"key2",arrayName,@"key3",dic1,@"key4",nil];
        
        
        NSString *obj1=[dic1 objectForKey:@"key1"];
        
        
        //字面量   @{ }  @[]
        NSDictionary *dic3=@{@"key1": @"value1",@"key2":@"value2",@"key3":@"value3"};
      
        //字典个数
        [dic3 count];
      
        
        //获取key值
        [dic3 allKeys];
       
        
        //获取所有的value值
        NSLog(@"%@",[dic3 allValues]);
        
        //获取一个key所对应的所有的value值
        NSLog(@"%@",[dic3 allKeysForObject:@"key1"]);
        
        //通过key值取对应的value值--法一
        [dic3 valueForKey:@"key2"];
      
        //法二
        NSLog(@"%@",dic3[@"key3"]);
        
        //
        NSDictionary *dic4=[[NSDictionary alloc]initWithObjectsAndKeys:@"value1",@"key1",@"value2",@"key2",arrayName,@"key3",dic1,@"key4",nil];
        //返回的是数组 接收方式一
        [dic4 objectForKey:@"key3"];
        
        // 接收方式二
        NSLog(@"key4==%@",dic4[@"key4"]);
        //value的类型是什么就得用什么类型的变量来接收
        
#pragma mark -------可变字典----------
        //便利构造器创建空的可变字典
        NSMutableDictionary *NSMdic1=[NSMutableDictionary dictionary];
        
        
        //添加key : value
        [NSMdic1 setObject:@"value1" forKey:@"key1"];
        [NSMdic1 setObject:@"xuxian" forKey:@"bainiangzi"];
        [NSMdic1 setObject:dic1 forKey:@"zidian 1"];
        [NSMdic1 setObject:arrayName forKey:@"shuzu 2"];
      
        
        //对数--当前容量
        NSLog(@"%lu",[NSMdic1 count]);
        
        //
        NSLog(@"%@",[NSMdic1 allKeys]);
        
        //
        NSLog(@"%@",[NSMdic1 allValues]);
        
        //删除
        [NSMdic1 removeObjectForKey:@"key1"];
       
        [NSMdic1 removeObjectForKey:@"zidian 1"];
    
        
        //添加-----有则改之无则加勉。
        [NSMdic1 setObject:@"qingtianzhu" forKey:@"nb"];
        
        //修改-
        [NSMdic1 setObject:@"ningxia" forKey:@"nb"];
        
        //遍历字典---先把key转换成数组
        NSArray *arrayNSMdic1=[NSMdic1 allKeys];
   
        for (int i=0; i<[arrayNSMdic1 count]; i++) {
            //NSMdic1[arrayNSMdic1[i]]
            NSLog(@"%@",[NSMdic1 objectForKey:arrayNSMdic1[i]]);
        }
        [NSMdic1 removeAllObjects];
        
        
        NSMutableDictionary *NSMdic2=[NSMutableDictionary dictionaryWithCapacity:0];
        [NSMdic2 setObject:dic1 forKey:@"dic2"];
        [NSMdic2 setObject:@"12" forKey:@"dic22"];
    
        
#pragma mark ----  集合 --------
        //存储的元素互不相同
        //存储的元素是无序
        //存储元素必须是对象类型

        
        // NSSet NSMutableSet
        
        NSSet *set=[[NSSet alloc]init];
  
        //遇到nil就结束
        NSSet *set1=[[NSSet alloc]initWithObjects:@"a",@"b",@"c",nil];
        
     
        //随机获取一个元素
        NSLog(@"%@",[set1 anyObject]);
        NSLog(@"%@",[set1 anyObject]);
        //判断集合中是否包含某个元素
        NSLog(@"%d",[set1 containsObject:@"a"]);
        
        //
        NSArray *arraySet =[set1 allObjects];
    
        for (int i=0; i<[arraySet count]; i++) {
            NSLog(@"===%@",arraySet[i]);
        }
        
        //
        NSMutableSet *NSMset=[NSMutableSet set];
     
        //添加元素
        [NSMset addObjectsFromArray:arraySet];
        
        //
        [NSMset addObject:@"d"];
        
        //
        [NSMset removeObject:@"a"];

        //添加一个字典作为集合的元素
        [NSMset addObject:dic1];
      
        
        
        //
        NSMutableSet *NSMset1=[NSMutableSet set];
        [NSMset1 addObject:NSMset];
       
        //
        NSMutableSet *NSMset2=[NSMutableSet setWithArray:arrayName];
      
        
        
        //
#pragma mark ----NSCountedSet---------
        //计数用的
        NSArray *arraycSet=[[NSArray alloc]initWithObjects:@"q",@"w",@"q", nil];
        NSCountedSet *cSet=[NSCountedSet set];
        [cSet addObjectsFromArray:arraycSet];
      
        NSUInteger i=[cSet countForObject:@"q"];
       
        //给一个随机数组,判断数组中重复出现的数字
        NSMutableArray *nsmArray=[NSMutableArray array];
        for (int i=0; i<10; i++) {
            NSNumber *nsNum=[[NSNumber alloc]initWithInt:(arc4random()%(10-1+1)+1) ];
            [nsmArray addObject:nsNum];
        }
        
        NSCountedSet *cSetArray=[[NSCountedSet alloc]initWithArray:nsmArray];
        for (int i=0; i<[cSetArray count]; i++) {
            NSCountedSet *cSetArray=[[NSCountedSet alloc]initWithArray:nsmArray];
            NSUInteger count=[cSetArray countForObject:nsmArray[i]];
            NSLog(@"%@的次数%lu",nsmArray[i],count);
            if (count>1) {
                NSNumber *temp=nsmArray[i];
                [nsmArray removeObject:nsmArray[i]];
                [nsmArray addObject:temp];
                i--;
                NSLog(@"移除重复的数后:%@",nsmArray);
            }
        }
        NSLog(@"删除重复的对象后:%@",nsmArray);
       //
        
#pragma mark ---  快速遍历   ---------
        NSArray *arr1=@[@"1",@"3",@"12",@"11"];
        NSLog(@"%@",arr1);
        for (int i=0; i<[arr1 count]; i++) {
            NSLog(@"%@",arr1[i]);
        }
        NSLog(@"用快速枚举器快速打印数组");
        for (NSString *obj in arr1) {
            NSLog(@"%@",obj);
        }
        NSLog(@"用id类型遍历");
        for (id obj in arr1) {
            NSLog(@"%@",obj);
        }
        
        //
        NSLog(@"快速遍历字典");
        NSDictionary *dicc1=@{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3"};
        //快速遍历对于字典来说,每次获取的都是key值
        //直接取key value
        for (NSString *obj in dicc1) {
            NSLog(@"%@,%@",obj,dicc1[obj]);
        }
        //转换取key 和 value 值
        NSLog(@"遍历value");
        NSArray *arrValue=[dicc1 allValues];
        for (NSString *obj in arrValue) {
            NSLog(@"%@",obj);
        }
        NSLog(@"遍历key");
        NSArray *arrKey=[dicc1 allKeys];
        for (NSString *obj in arrKey) {
            NSLog(@"%@",obj);
        }
#pragma mark -------  枚举器  ------------------
        //是一个工具,帮我们从数组中将元素逐个取出。
        NSArray *arr2=@[@"1",@"2",@"3",@"4",@"5",@"6"];
        //把数组元素装进枚举中
        NSEnumerator *enum1=[arr2 objectEnumerator];
        id obj;//任意类型,在不知道数组的元素类型的时候
        while (obj = [enum1 nextObject]) {
            NSLog(@"正在遍历 %@",obj);
        }
        NSLog(@"遍历结束");
        
        NSDictionary *dict1=@{@"key1":@"value1",@"key2":@"value2",@"key3":@"value3"};
        //把字典元素放在枚举中
        NSEnumerator *enum2=[dict1 objectEnumerator];
        id objdict;
        while (objdict = [enum2 nextObject]) {
            NSLog(@"正在遍历%@",objdict);
        }
      //compare跟排序组合,还可以自定义compare
        NSArray *array=@[@"1",@"4",@"-9",@"12",@"2",@"56"];
        
        NSLog(@"排序前%@",array);
        
        NSArray *array1=[array sortedArrayUsingSelector:@selector(compare:)];
        NSLog(@"排序后%@",array1);
        
        NSMutableArray *NSMarray=[NSMutableArray arrayWithObjects:@"f",@"d",@"c",@"b", nil];
        NSLog(@"排序前%@",NSMarray);
        
        [NSMarray sortUsingSelector:@selector(compare:)];
        NSLog(@"排序后%@",NSMarray);
        
        //练习:
        Student *student=[Student studentName:@"yibella" Age:22 Score:98.5];
        NSLog(@"%@",student);
        
        Student *aStudent=[[Student alloc]init];
        [aStudent setName:@"qingqing" Age:12 Score:88];
        
        [student compareByAge:aStudent];
        NSLog(@"年龄比较结果:%d",[student compareByScore:aStudent]);
        [student compareByScore:aStudent];
        NSLog(@"成绩比较结果:%d",[student compareByScore:aStudent]);
        
        Student *student1=[Student studentName:@"xing" Age:19 Score:89];
        
        NSMutableArray *arrayStudent=[NSMutableArray array];
        [arrayStudent addObject:student];
        [arrayStudent addObject:aStudent];
        [arrayStudent addObject:student1];
        //封装了冒泡排序算法
        [arrayStudent sortUsingSelector:@selector(compareByAge:)];
        NSLog(@"按年龄排序%@",arrayStudent);
        
        [arrayStudent sortUsingSelector:@selector(compareByScore:)];
        NSLog(@"按成绩排序%@",arrayStudent);
        
//        [arrayStudent sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
////            if()
//        }
        
    }
    return 0;
}

0 0