IOS开发之旅-IOS常用数据结构NSArray、NSMutableArray、NSDictionary、NSMutableDictionary介绍

来源:互联网 发布:自动缝包机 知乎 编辑:程序博客网 时间:2024/05/19 21:00
  • NSArray

  • NSArray基本用法
复制代码
void arrayTest1(){    //数组初始化最后必须以nil结尾,表示数组元素结束    NSArray *array1 = [[NSArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4",nil];    NSLog(@"%@",array1);    /*(     item1,     item2,     item3,     item4     )*/        //获取数组元素个数    NSLog(@"array count : %ld",array1.count);    /*array count : 4*/            //获取特定所以元素    NSLog(@"array[1] = %@",array1[1]);    /* array[1] = item1 */    NSLog(@"array[1] = %@",[array1 objectAtIndex:(NSInteger)1]);    /* array[1] = item1 */    NSLog(@"firstObject = %@",array1.firstObject);  //获取第一个元素    /* firstObject = item1 */    NSLog(@"lastObject = %@",array1.lastObject);    //获取最后一个元素    /* lastObject = item4 */        //拼接数组    NSLog(@"%@",[array1 componentsJoinedByString:@","]);    /* item0,item1,item2,item3,item4 */        //查找元素的索引,如果包含特定元素,返回具体索引,否则返回:9223372036854775807    NSLog(@"%ld",[array1 indexOfObject:@"item11"]);        //是否包含特定元素    NSLog(@"%i", [array1 containsObject:@"item1"] == TRUE ? 1 : 0);    /* 1 */        NSArray *subArray = [array1 subarrayWithRange:NSMakeRange(1, 2)];    NSLog(@"%@",subArray);    /*     (     item1,     item2     )     */        //保存数组元素到本地文件,以xml格式序列化存储    [array1 writeToFile:@"/Users/new/Desktop/array.txt" atomically:YES];    /*     <?xml version="1.0" encoding="UTF-8"?>     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">     <plist version="1.0">     <array>     <string>item0</string>     <string>item1</string>     <string>item2</string>     <string>item3</string>     <string>item4</string>     </array>     </plist>     */        //读取本地文件,反序列化为数组    NSArray *array2 = [[NSArray alloc]initWithContentsOfFile:@"/Users/new/Desktop/array.txt"];    NSLog(@"%@",array2);    /*     (     item0,     item1,     item2,     item3,     item4     )     */        //判断数组元素是否相等    BOOL result = [array1 isEqualToArray:@[@"item0",@"item1",@"item2"]];    NSLog(@"%@",result);    /* 0 */
}
复制代码
  • NSArray遍历
复制代码
void arrayTest2(){    NSArray *array1 = [[NSArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4",nil];        //遍历方法1    for (int index = 0; index < array1.count; index++) {        NSLog(@"%@",array1[index]);    }    /*     item0     item1     item2     item3     item4     */        //遍历方法2    for (NSString *item in array1) {        NSLog(@"%@",item);    }    /*     item0     item1     item2     item3     item4     */        //遍历方法3    //NSEnumerator *enumerator = [array1 reverseObjectEnumerator]; //逆向遍历    NSEnumerator *enumerator = [array1 objectEnumerator];          //正向遍历    NSString *item = nil;    while (item = [enumerator nextObject]) {        NSLog(@"%@",item);    }    /*     item0     item1     item2     item3     item4     */        //遍历方法4    [array1 enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {        NSLog(@"%ld = %@",idx,obj);    }];    /*     0 = item0     1 = item1     2 = item2     3 = item3     4 = item4     */}
复制代码
  • NSArray排序
复制代码
void arrayTest3(){    //排序方法1,普通比较器    NSArray *array1 = @[@"1",@"21",@"11",@"5",@"51",@"3"];    NSArray *array2 = [array1 sortedArrayUsingSelector:@selector(compare:)];    NSLog(@"%@",array2);    /*     (     1,     11,     21,     3,     5,     51     )     */            //排序方法2,代码块    NSArray *array3 = [array1 sortedArrayUsingComparator:^NSComparisonResult(id obj1, id obj2) {        return [obj1 compare:obj2];    }];    NSLog(@"%@",array3);    /*     (     1,     11,     21,     3,     5,     51     )     */                //排序方法3,自定义排序描述符    NSArray *originalArray = @[                                @{@"page_no":@"27",@"age":@24},                                @{@"page_no":@"1", @"age":@23},                                @{@"page_no":@"1", @"age":@21},                                @{@"page_no":@"1", @"age":@25},                                @{@"page_no":@"1", @"age":@15},                                @{@"page_no":@"12",@"age":@19},                                @{@"page_no":@"23",@"age":@29},                                @{@"page_no":@"3", @"age":@22},                                @{@"page_no":@"2", @"age":@30},                                @{@"page_no":@"17",@"age":@33}                            ];    NSSortDescriptor *alphaNumSD = [NSSortDescriptor sortDescriptorWithKey:@"page_no" ascending:YES comparator:^NSComparisonResult(NSString *string1, NSString *string2) {        return [string1 compare:string2 options:NSNumericSearch];    }];    NSSortDescriptor *dataNumSD = [NSSortDescriptor sortDescriptorWithKey:@"age" ascending:YES comparator:^NSComparisonResult(id data1, id data2) {        return [data1 compare:data2];    }];    NSArray *sortedArray = [originalArray sortedArrayUsingDescriptors:@[alphaNumSD,dataNumSD]];    NSLog(@"%@",sortedArray);    /*     (     {     age = 15;     "page_no" = 1;     },     {     age = 21;     "page_no" = 1;     },     {     age = 23;     "page_no" = 1;     },     {     age = 25;     "page_no" = 1;     },     {     age = 30;     "page_no" = 2;     },     {     age = 22;     "page_no" = 3;     },     {     age = 19;     "page_no" = 12;     },     {     age = 33;     "page_no" = 17;     },     {     age = 29;     "page_no" = 23;     },     {     age = 24;     "page_no" = 27;     }     )     */            //排序方法4,自定义比较方法    Person *person1 = [[Person alloc]initWithFirstName:@"hello" lastName:@"world" age:35];    Person *person2 = [[Person alloc]initWithFirstName:@"abc" lastName:@"def" age:25];    Person *person3 = [[Person alloc]initWithFirstName:@"cal" lastName:@"kdl" age:22];    NSArray *personArray = @[person1,person2,person3];    NSArray *tempArray = [personArray sortedArrayUsingSelector:@selector(comparePeople:)];    NSLog(@"%@",tempArray);    /*     (     " firstName: abc,lastName:def,age:25",     " firstName: cal,lastName:kdl,age:22",     " firstName: hello,lastName:world,age:35"     )     */    }
复制代码
  • NSMutableArray

  NSMutableArray继承NSArray,所以NSArray的所有特性NSMutableArray都有,在此基础上,NSMutableArray主要新增了添加、删除、更新、插入等特性,如下代码演示:

复制代码
void arrrayTest4(){    NSMutableArray *mutableArray = [[NSMutableArray alloc]initWithObjects:@"item0",@"item1",@"item2",@"item3",@"item4", nil];    NSLog(@"%@",mutableArray);    /*     (     item0,     item1,     item2,     item3,     item4     )     */        //添加元素    [mutableArray addObject:@"item5"];    NSLog(@"%@",mutableArray);    /*     (     item0,     item1,     item2,     item3,     item4,     item5     )     */        //插入元素    [mutableArray insertObject:@"inserted item" atIndex:(NSInteger)1];    NSLog(@"%@",mutableArray);    /*     (     item0,     "inserted item",     item1,     item2,     item3,     item4,     item5     )     */        //删除元素    [mutableArray removeObject:@"item5"];    NSLog(@"%@",mutableArray);    /*     (     item0,     item1,     item2,     item3,     item4     )     */        //更新元素    [mutableArray replaceObjectAtIndex:(NSInteger)5 withObject:@"replacedItem"];    NSLog(@"%@",mutableArray);    /*     (     item0,     "inserted item",     item1,     item2,     item3,     replacedItem     )     */        //删除所有元素    [mutableArray removeAllObjects];    NSLog(@"%ld",mutableArray.count);    /* 0 */}
复制代码

 

  • NSDictionary

  • 字典初始化
复制代码
void arrayTest5(){    //字典初始化方式1    NSDictionary *dictionary1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value0",@"key0",                                                                           @"value1",@"key1",                                                                           @"value2",@"key2",                                                                           @"value3",@"key3",                                                                           @"value4",@"key4",                                                                           nil];        NSLog(@"%@",dictionary1);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */            //字典初始化方式2    NSArray *valueArray = @[@"value0",@"value1",@"value2",@"value3",@"value4"];    NSArray *keyArray = @[@"key0",@"key1",@"key2",@"key3",@"key4"];    NSDictionary *dictionary2 = [[NSDictionary alloc]initWithObjects:valueArray forKeys:keyArray];    NSLog(@"%@",dictionary2);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */            //字典初始化方式3    NSDictionary *dictionary3 = @{                                 @"key0":@"value0",                                 @"key1":@"value1",                                 @"key2":@"value2",                                 @"key3":@"value3",                                 @"key4":@"value4"                                 };    NSLog(@"%@",dictionary3);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */            //调用NSDictionary静态方法生成字典    NSDictionary *dictionary4 = [NSDictionary dictionaryWithObject:@"value0" forKey:@"key0"];    NSLog(@"%@",dictionary4);    /*     {     key0 = value0;     }     */            NSDictionary *dictionary5 = [NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray];    NSLog(@"%@",dictionary5);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */        NSDictionary *dictionary6 = [NSDictionary dictionaryWithObjectsAndKeys:@"value0",@"key0",@"value1",@"key1",@"value2",@"key2",@"value3",@"key3",@"value4",@"key4", nil];    NSLog(@"%@",dictionary6);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */}
复制代码
  • 字典基本常用用法
复制代码
void arrayTest6(){    NSDictionary *dictionary1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value0",@"key0",                                 @"value1",@"key1",                                 @"value2",@"key2",                                 @"value3",@"key3",                                 @"value4",@"key4",                                 @"value4",@"key5",                                 nil];    NSLog(@"%@",dictionary1);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value4     }     */            NSLog(@"%ld",dictionary1.count);    /* 5 */        //输出特定元素    NSLog(@"%@",dictionary1[@"key0"]);    NSLog(@"%@",[dictionary1 objectForKey:@"key0"]);    /* value0 */        //获取所有key    NSLog(@"%@",dictionary1.allKeys);    /*     (     key3,     key1,     key4,     key2,     key0     )     */        //获取所有value    NSLog(@"%@",dictionary1.allValues);    /*     (     value3,     value1,     value4,     value2,     value0     )     */        //获取特定value对应的所有key    NSLog(@"%@",[dictionary1 allKeysForObject:@"value4"]);    /*     (     key4,     key5     )     */        //分别获取key对应的value,对于不存在的key,返回"not found"    NSLog(@"%@",[dictionary1 objectsForKeys:@[@"key0",@"key1",@"key8"] notFoundMarker:@"not found"]);    /*     (     value0,     value1,     "not found"     )     */        NSDictionary *dictionaryOther = @{@"key0":@"value0"};    BOOL result = [dictionary1 isEqualToDictionary:dictionaryOther];    NSLog(@"%hhd",result);    /* 0 */        //保存到本地文件    [dictionary1 writeToFile:@"/Users/new/Desktop/dictionary.txt" atomically:YES];    /*     <?xml version="1.0" encoding="UTF-8"?>     <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">     <plist version="1.0">     <dict>     <key>key0</key>     <string>value0</string>     <key>key1</key>     <string>value1</string>     <key>key2</key>     <string>value2</string>     <key>key3</key>     <string>value3</string>     <key>key4</key>     <string>value4</string>     <key>key5</key>     <string>value4</string>     </dict>     </plist>     */        //读取本地文件,反序列化为字典    NSDictionary* dictionary2 = [NSDictionary dictionaryWithContentsOfFile:@"/Users/new/Desktop/dictionary.txt"];    NSLog(@"%@",dictionary2);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value4;     }     */        //修改字典元素值,如果key存在,则修改对应的value,如果key不存在,则插入一个新元素    [dictionary2 setValue:@"update value0" forKey:@"key0"];    NSLog(@"%@",dictionary2);    /*     {     key0 = "update value0";     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value4;     }     */        //插入一个新元素,该key不存在    [dictionary2 setValue:@"key not found" forKey:@"noKey"];    NSLog(@"%@",dictionary2);    /*     {     key0 = "update value0";     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value4;     noKey = "key not found";     }     */}
复制代码
  • NSDictionary遍历
复制代码
void dictionaryTest(){    NSDictionary *dictionary1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value0",@"key0",                                 @"value1",@"key1",                                 @"value2",@"key2",                                 @"value3",@"key3",                                 @"value4",@"key4",                                 @"value4",@"key5",                                 nil];    //遍历方法一    for (NSString *key in dictionary1) {        NSLog(@"%@ = %@",key,dictionary1[key]);    }    /*     key3 = value3     key1 = value1     key4 = value4     key2 = value2     key0 = value0     key5 = value5     */            //遍历方法二    //NSEnumerator *objectEnumerator = [dictionary1 objectEnumerator];    //objectEnumerator获取value枚举    NSEnumerator *keyEumerator = [dictionary1 keyEnumerator];           //keyEnumerator获取key枚举    NSString *key = nil;    while (key = [keyEumerator nextObject]) {        NSLog(@"%@ = %@",key,dictionary1[key]);    }    /*     key3 = value3     key1 = value1     key4 = value4     key2 = value2     key0 = value0     key5 = value5     */        //遍历方法三    [dictionary1 enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {        NSLog(@"%@ = %@",key,obj);    }];    /*     key3 = value3     key1 = value1     key4 = value4     key2 = value2     key0 = value0     key5 = value5     */    }
复制代码

 

  • NSMutableDictionary

NSMutableDictionary继承于NSDictionary,在此基础上新增加对元素新增、删除、更新等操作,如下代码演示

复制代码
void mutableDictionaryTest(){    NSMutableDictionary *mutableDictionary = [[NSMutableDictionary alloc]initWithCapacity:7];    NSLog(@"%ld",mutableDictionary.count);    /* 0 */    [mutableDictionary setValue:@"value0" forKey:@"key0"];    [mutableDictionary setValue:@"value1" forKey:@"key1"];    [mutableDictionary setValue:@"value2" forKey:@"key2"];    [mutableDictionary setValue:@"value3" forKey:@"key3"];    [mutableDictionary setValue:@"value4" forKey:@"key4"];    [mutableDictionary setValue:@"value5" forKey:@"key5"];    [mutableDictionary setValue:@"value6" forKey:@"key6"];    [mutableDictionary setValue:@"value7" forKey:@"key7"];    NSLog(@"%ld",mutableDictionary.count);    /* 8 */    NSLog(@"%@",mutableDictionary);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value5;     key6 = value6;     key7 = value7;     key8 = value8;     }     */            //删除元素    [mutableDictionary removeObjectForKey:@"key7"];    NSLog(@"%ld",mutableDictionary.count);    /* 7 */    NSLog(@"%@",mutableDictionary);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     key5 = value5;     key6 = value6;     }     */        //对于key存在,则修改对应的value,否则添加新元素    [mutableDictionary setValue:@"update value6" forKey:@"key6"];    NSLog(@"%@",mutableDictionary);        //移除多个key对应的元素    [mutableDictionary removeObjectsForKeys:@[@"key6",@"key5"]];    NSLog(@"%@",mutableDictionary);    /*     {     key0 = value0;     key1 = value1;     key2 = value2;     key3 = value3;     key4 = value4;     }     */        //移除所有元素    [mutableDictionary removeAllObjects];    NSLog(@"%ld",mutableDictionary.count);    /* 0 */}
复制代码

 

  以上代码在开发过程中比较常用

0 0
原创粉丝点击