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

  • 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 */

}

 

  以上代码在开发过程中比较常用,如果有不足之处,请给我留言

你可能感兴趣的:(NSArray)