集合

集合:用来存储对象的容器

集合中不可变的类都是可变的类的父类。子类功能更强大,有父类的功能和自身的功能。集合都是以nil结束。

集合中只有数组有序。字典与set都是散列存储(hash),查找快。

arrayWithContentsOfFIle:arrayWithContentsOfURL:

如果文件存的是字符串,读取出来的也是字符串。

如果文件存的是数组,读取出来的也是数组。

如果文件存的是字典,读取出来的也是字典。

如果文件存的是集合,读取出来的也是集合。

不可变都是不支持对对象增删改操作。


 

一.数组(可存重复对象)

1.不可变

  • NSArray(不可对对象增删改)可存放多个对象,每个对象使用下标来表示。
  • CFArrayRef(C语言用的数组,用于操作硬件)
  • for-in:(in 相当于赋值NSString *s = array)快速遍历同一类型对象

2.可变

集合的内存管理中,如果一个对象(或数组)被加到集合中,集合会使引用计数加1,控制权归集合(系统)。

二.字典

  1. 以键值对、无序的存储。
  2. key决定集合个数,key重复会覆盖,一般字符串类型,实际是id。
  3. 字典有区分范围的作用。当value为数组时(广州),当value为字典时(广州-天河)
  4. %@可以输出对象描述,起到很好的调试作用。
  5. 字典的操作都是通过key来实现,把key弄成有序就可以让整个字典有序(但通常很少这个需求)。

三.set

无序集合,存储的对象最好不要重复,重复会覆盖。

四.转换


 

1数组

集合
 //oc可变参数
    NSArray *arr1 = [[NSArray alloc]initWithObjects:@"jobs",@"bill",@"keati",nil];
    //访问对象
    NSString *str0 = [arr1 objectAtIndex:0];
    NSLog(@"str0 = %@",str0);
    
    NSLog(@"%@",[arr1 lastObject]);
    NSLog(@"%d",arr1.count);
    //返回元素位置
    NSLog(@"jobs an index:%d",[arr1 indexOfObject:@"jobs"]);
    for (int i = 0; i < arr1.count;i++)
    {
        //NSLog(@"%@",[arr1 objectAtIndex:i]);
        NSString *str = [arr1 objectAtIndex:i];
        NSString *newStr = [str stringByAppendingString:@"1"];
        NSLog(@"%@",newStr);
    }
    //for-in 快速遍历(指针指向arr1)
    for (NSString *str in arr1)
    {
        NSString *newStr = [str stringByAppendingString:@"2"];
        NSLog(@"str = %@",newStr);
    }
    NSLog(@" ");
    //排序
    NSArray *orderArray = [arr1 sortedArrayUsingSelector:@selector(compare:)];
    for (NSString *s in orderArray)
    {
        NSLog(@"%@",s);
    }
    //新语法
    NSString *str1 = arr1[0];
    NSLog(@"str1 = %@",str1);
    //可变数组
    NSMutableArray *mArr = [NSMutableArray arrayWithCapacity:3];
    
    Student *stu1 = [[Student alloc]init];
    stu1.name = @"batman";
    NSLog(@"stu1 retainCount:%d",[stu1 retainCount]);
    //添加元素
    [mArr addObject:stu1];//系统retian的
    NSLog(@"stu1 retainCount:%d",[stu1 retainCount]);
    
    
    Student *stu2 = [[Student alloc]init];
    stu2.name = @"oxman";
    [mArr addObject:stu2];
    NSLog(@"stu1 retainCount:%d",[stu2 retainCount]);
    
    
    Student *stu3 = [[Student alloc]init];
    stu3.name = @"superman";
    [mArr addObject:stu3];
    NSLog(@"stu1 retainCount:%d",[stu3 retainCount]);
    NSLog(@"mArrCount1 = %@",mArr);
    
    [mArr insertObject:stu3 atIndex:0];
    
    //s3,s1,s2,s3
    NSLog(@"mArrCount2 = %@",mArr);
    
    [mArr removeObjectIdenticalTo:stu3];//remove同一对象,同时引用计数减一
    NSLog(@"%@",mArr);
    
    [mArr replaceObjectAtIndex:0 withObject:stu1];
    NSLog(@"%@",mArr);
    //
    NSArray *arr = @[@"3",@"2",@"1"];//新语法
    NSMutableArray *mArray = [NSMutableArray arrayWithArray:arr];//父类转子类需通过这层转
    [self bubbles:mArray];
    NSLog(@"%@",mArray);
集合
集合
-(void)bubbles:(NSMutableArray *)aMutableArray
{
    int count = aMutableArray.count;
    for (int i = 0; i < count - 1; i++)
    {
        for (int j = 0; j < count -1 - i; j++)
        {
            int a = [[aMutableArray objectAtIndex:j]integerValue];
            int b = [[aMutableArray objectAtIndex:j+1]integerValue];
            if (a > b)
            {
                [aMutableArray exchangeObjectAtIndex:j withObjectAtIndex:j+1];
            }
        }
    }
}
集合

2.字典

集合
NSDictionary *dic1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value1",@"key1",
                                                                     @"value3",@"key3",
                                                                     @"value2",@"key2",nil];
    
    //快速输出
    NSLog(@"%@",dic1);
    //访问
    NSString *str = [dic1 valueForKey:@"key1"];
    NSLog(@"str = %@",str);
    //不能添加,修改,删除
    //元素个数
    NSLog(@"dic1 count:%d",dic1.count);
    //获取所有keys
    NSArray *keys = [dic1 allKeys];
    //获取所有values
    NSArray *values = [dic1 allValues];
    NSLog(@"keys = %@",keys);
    NSLog(@"values = %@",values);
    //遍历
    for(NSString *key in dic1.allKeys)
    {
        NSString *v = [dic1 valueForKey:key];
        NSLog(@"dic = %@",v);
    }
    
    //可变字典
    NSMutableDictionary *dic2 = [NSMutableDictionary dictionaryWithCapacity:5];
    //添加元素
    [dic2 setObject:@"value1" forKey:@"key1"];
    
    Student *s = [[Student alloc]init];
    s.name = @"jobs";
    
    //添加value为student类型对象的元素
    [dic2 setObject:s forKey:@"jobs"];
    NSLog(@"dic2 = %@",dic2);
    
    //通过覆盖key值来修改
    [dic2 setObject:@"jobs" forKey:@"jobs"];
    NSLog(@"dic2 = %@",dic2);

    //通过删除key值删元素
    [dic2 removeObjectForKey:@"jobs"];
    NSLog(@"dic2 = %@",dic2);
集合

3.Set

集合
NSSet *set1 = [[NSSet alloc]initWithObjects:@"1",@"2",@"3",@"1",nil];
    NSSet *set2 =[NSSet setWithObjects:@"2", nil];
    
    BOOL isSubSet = [set2 isSubsetOfSet:set1];//set2是否set1的子集
    //快速输出
    NSLog(@"set = %@",set1);
    //求交集
    BOOL isInter = [set2 intersectsSet:set1];
集合

4.对象类型转换

集合
//对基本数据类型转为对象类型
    NSLog(@"%@",[NSNumber numberWithInt:5]);
    NSNumber *number = [[NSNumber alloc]initWithInt:9];
    NSLog(@"%@",number);
    //对象类型转整形
    NSLog(@"%d",[number integerValue]);
    //把结构体转为对象类型
    CGPoint p = {100,100};
    NSValue *val = [NSValue valueWithBytes:&p objCType:@encode(CGPoint)];
    NSLog(@"%@",val);
    //对象类型转为结构体
    CGPoint q;
    [val getValue:&q];
    NSLog(@"%@",val);
    //得到一个空对象,可以存到集合
    NSLog(@"%@",[NSNull null]);
集合

集合

上一篇:匈牙利命名法


下一篇:【问题】kafka.common.KafkaException: fetching topic metadata for topics