OC 04 集合

    xiaoxiao2024-04-18  4

    可变的数组,字典,字符串都没有快速初始化方法

    OC的集合类

    OC语言的集合不再是单纯的数组,而是分为3大类:数组NSArray,字典NSDictionary,集NSSet;平常使用的集合都是这3类,或者他们的子类;

    OC语言的所有集合都是对象;

    集合中的元素也都是对象,集合中也只能存放对象;

    简单及复杂数据类型(int、double、CGPoint、CGRect)可以封装为NSValue、NSNumber对象再放入集合类中;

    集合中不能存放nil空对象,nil是作为集合结束标识符。

    数组

    OC中的集合类只能收集cocoa对象(NSObject对象),C数据类型(例如:int、float、double、BOOL等),需要封装成NSNumber类型的,才可以保存在集合类中。(NSNumber对象是cocoa对象)  OC中的数组同C语言中的数组非常接近,常见的用法首先是创建数组,然后对数组进行操作。

    OC中数组分为不可变数组(NSArray)和可变数组(NSMutableArray) ,且只能存储Object-C对象。

    NSArray在初始化的同时一般需要指定它所包含的元素,以nil作为结束标志,初始化中不能包含空对象;

    NSArray是不可变数组,数组存放的对象个数和每个对象都不可改。  

    //NSArray在初始化的同时一般需要指定它所包含的元素,以nil作为结束标志,初始化中不能包含空对象; //实例方法初始化 NSArray *array = [[NSArrayalloc]initWithObjects:@"a",@3,@"3",nil]; NSLog(@"%@",array); NSArray *array1 = [[NSArrayalloc]initWithArray:array]; NSLog(@"%@",array1); //便利初始化方法 NSArray *array2 = [NSArrayarrayWithObjects:@"1",@"2",nil]; NSLog(@"%@",array2); //简化操作 NSArray *array4 =@[@"h",@"e",@"l"]; //获取数组元素个数 NSInteger count = array4.count; NSLog(@"count = %ld",count);

    数组的运算:(数组是有序的,可重复)

    //添加元素 NSArray *array =@[@"h",@"e",@"l",@"o",@"w"]; NSArray *addArray = [arrayarrayByAddingObject:@"l"]; NSLog(@"addArray = %@",addArray); NSArray *array2 = [arrayarrayByAddingObjectsFromArray:array]; NSLog(@"array2 = %@",array2); //查找元素 NSInteger index = [array2indexOfObject:@"h"]; NSLog(@"index = %ld",index); //获取元素 id object = array.firstObject; NSLog(@"%@",object); id object1 = array[0]; NSLog(@"%@",object1); id object2 = [arrayobjectAtIndex:0]; NSLog(@"%@",object2); //获取第一个 NSString *string1 = array.firstObject; NSLog(@"%@",string1); //获取最后一个 NSString *string2 = array.lastObject; NSLog(@"%@",string2); //获取部分元素 NSArray *subArray = [arraysubarrayWithRange:NSMakeRange(1,2)]; NSLog(@"sub = %@",subArray);

    数组的排序

    NSArray *array = [NSArrayarrayWithObjects:@"4",@"12",@"3",@"21",nil]; //@selector方法选择器 NSArray *sortArr = [arraysortedArrayUsingSelector:@selector(compare:)]; NSLog(@"sortArr = %@",sortArr); //block NSArray *newSort = [arraysortedArrayUsingComparator:^NSComparisonResult(id _Nonnull obj1, id _Nonnull obj2) { NSInteger a = [obj1integerValue]; NSInteger b = [obj2integerValue]; if (a == b) { return0; }elseif(a > b){ return 1; //降序排序若改成return 1;则为升序 }else{ return -1; //降序排序若改成return -1;则为升序 } }]; NSLog(@"newSort = %@",newSort);

    数组的遍历

    NSArray *array = [[NSArrayalloc]initWithObjects:@"a",@"b",@"c",nil]; //普通遍历 for (int i =0; i < array.count; i ++) { NSLog(@"%@",[arrayobjectAtIndex:i]); } //快速枚举(推荐) for (id objectin array) { NSLog(@"object = %@",object); }

    NSMutableArray可变数组

    //初始化 NSMutableArray *mutableArray1 = [[NSMutableArrayalloc]initWithObjects:@"3",@"1",@"4",nil]; NSMutableArray *mutableArray2 = [[NSMutableArrayalloc]initWithObjects:@"a",@"r",@"B",nil]; //增 [mutableArray1 addObject:@"2"]; NSLog(@"%@",mutableArray1); //删 [mutableArray1 removeObject:@"3"]; NSLog(@"%@",mutableArray1); //查 NSInteger index = [mutableArray1indexOfObject:@"1"]; NSLog(@"index = %ld",index); //改(替换) [mutableArray1 replaceObjectAtIndex:0withObject:@"2"]; NSLog(@"%@",mutableArray1); //排序 [mutableArray1 sortUsingSelector:@selector(compare:)]; NSLog(@"%@",mutableArray1); //compare区分大小写 [mutableArray2 sortUsingSelector:@selector(compare:)]; NSLog(@"%@",mutableArray2); //caseInsensitiveCompare不区分大小写 [mutableArray2 sortUsingSelector:@selector(caseInsensitiveCompare:)]; NSLog(@"%@",mutableArray2); //复杂一点的 NSArray *dataArr =@[@"a",@[@"ada",@"anie"], @{@"book":@[@"math",@"english",@"chinese"] } ]; NSLog(@"%@",dataArr); NSLog(@"%@",dataArr[2][@"book"][2]); //取出chinese

    字典NSDictionary

    //key - value 键值对 // 1 -- name1 // 2 -- name2 //初始化(前面的是value值,后面的是key值) NSDictionary *dictionary = [[NSDictionaryalloc]initWithObjectsAndKeys:@"one",@"1",@"two",@"2",nil]; NSLog(@"dic = %@",dictionary); //便利构造 NSDictionary *dictionary1 = [NSDictionarydictionaryWithObjectsAndKeys:@"one",@"1",nil]; NSLog(@"dic1 = %@",dictionary1); //字典的快速生成(前面的是key值,后面的是value值) //简化适合不可变字典,不推荐可变字典使用 NSDictionary *dictionary2 =@{@"1":@"one",@"2":@"two"}; NSLog(@"dic2 = %@",dictionary2); //键值对的个数(几对) NSLog(@"count = %ld",dictionary.count); //查询一个对象 NSString *object = [dictionaryobjectForKey:@"2"]; NSLog(@"object = %@",object); //快速查询(直接取key值) NSString *object1 = dictionary[@"1"]; NSLog(@"object1 = %@",object1); //取出所有的key NSArray *key = [dictionaryallKeys]; //dictionary.allKeys NSLog(@"key = %@",key); //取出所有的对象 NSArray *value = [dictionaryallValues]; //dictionary.allValues NSLog(@"value = %@",value);

    字典的遍历

    //因为字典是以key-value形式存在,所以不可以直接遍历出一对,只能keys或 value //字典是无序的 //先取出所有的key for (int i =0; i <dictionary.count; i ++) { id key1 = key[i]; id object = dictionary[key1]; NSLog(@"%@",object); } //根据key,遍历所有的value //快速枚举法 for (id objectin dictionary) { // NSLog(@"%@",object); //(只取出key) // NSLog(@"%@",dictionary[object]); //(1)取出value NSLog(@"%@",[dictionaryobjectForKey:object]); //(2)取出value } for (id objectin key) { NSLog(@"%@",dictionary[object]);//(3)取出value }

    NSMutableDictionary可变字典      

    //初始化 NSMutableDictionary *mutablDic = [NSMutableDictionarydictionaryWithObjectsAndKeys:@"one",@"1",@"two",@"2",nil]; //增:添加没有顺序 [mutablDic setObject:@"three"forKey:@"3"]; NSLog(@"dic = %@",mutablDic); //删 [mutablDic removeObjectForKey:@"3"]; NSLog(@"dic1 = %@",mutablDic); //查 id object2 = [mutablDicobjectForKey:@"2"]; NSLog(@"obj = %@",object2); //改(根据key将原来的覆盖掉) //setobject...forkey方法,如果字典中没有添加的这个Key,就做添加处理,如果有,当修改处理 [mutablDic setObject:@"change"forKey:@"2"]; NSLog(@"dic2 = %@",mutablDic);

    NSSet(类似于数组,但是是无序的)

    //用于去除重复数 NSSet *set = [NSSetsetWithObjects:@"1",@"10",@"1",@"5",@"2",@"3",@"4",@"3",nil]; NSLog(@"%@",set); /* 里面的数据无法按照顺序取出,只能取出随机一个,或者一次性全部取出 */ //取一个 id object3 = [setanyObject]; NSLog(@"%@",object3); //取所有的 NSArray *setArr = [setallObjects]; NSLog(@"setArr = %@",setArr);
    转载请注明原文地址: https://ju.6miu.com/read-1288098.html
    最新回复(0)