首页 > 代码库 > 黑马程序员-Foundation框架之数组和字典

黑马程序员-Foundation框架之数组和字典

一、Foundation框架简介

Foundation框架,顾名思义就是基础框架。基础框架上的类都是与用户界面无关的,为所有的程序开发提供一个基础。OC的基础框架常用的类包括:数组,字典,数字,字符串等以及它们的子类。要使用这个框架需要在引入头文件#import <Foundation/Foundation.h>

二、数组

NSArray类以及它的子类NSMutableArray,一个是不可变数组,一个是可变数组。下面通过代码来看一下它的一些基本的用法。

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc,const char* argv[]) 4 { 5     NSArray *arrayWithEmpty = [NSArray array]; // 创建一个空数组,这个数组永远为空 6     NSArray *array1 = [NSArray arrayWithObject:@"Himym!"];  //  创建非空数组,含一个元素 7     NSArray *array2 = [NSArray arrayWithObjects:@"Himym",@"Robb",nil];  // 创建非空数组,含多个元素,以nil结尾 8     NSArray *array3 = @[@"HImym",@"Baratheon",@"Miss Gao"]; // 快速创建一个对象 9     NSLog(@"array2  %ld",array2.count,array3.count); // 数组元素个数10     NSLog(@"%@",[array2 objectAtIndex:1]);11     NSLog(@"%@",array[2]);   // 访问数组元素12     NSMutableArray *array4 = [NSMutableArray arrayWithObjects:@"Himym",@"Robb",nil];13     [array4 addObject:[[Person alloc] init]];14     [array4 addObject:@"NaNa"];  //  往数组里面添加元素15     [array4 removeObject:@"Miss Zhao"];16     [array4 removeObjectAtIndex:1];17     [array4 addObjectsFromArray:array2];18     for(id obj in array4)  // 遍历数组19     {20         NSUInteger i = [array4 indexOfObject:obj];21         NSLog(@"%ld  %@",i,obj);28         if(i == 2)29          *stop = YES;30     }];31     return 0;32 }

注意问题:

> @[] 只创建不可变数组NSArray,NSMutableArray *array = @[@"jack", @"rose"];是错误写法

> 数组不能存放nil值;只能存放OC对象、不能存放非OC对象类型,比如int、struct、enum等。

三、字典

字典(NSDictionary,NSMutableDictionary)是由键-值对组成的数据集合。通过key来查找value,key可以是任意类型对象,但是其值必须是唯一的。

下面通过代码来看一下基本用法

 1 #import <Foundation/Foundation.h> 2  3 int main(int argc, const char * argv[]) 4 { 5      6     // 创建字典 7     NSDictionary *dic1 = [NSDictionary dictionaryWithObject:@"Himym.Baratheon" forKey:@"name"]; 8     NSArray *name = @[@"Himym.Baratheon",@20]; 9     NSArray *key = @[@"name",@"age"];10     NSDictionary *dic2 = [NSDictionary dictionaryWithObjects:name forKeys:key];11     NSDictionary *dic3 = [NSDictionary dictionaryWithObjectsAndKeys:@"Ned.Start",@"name",@20,@"age", nil];12     13     // 快速创建14     NSDictionary *dic0 = @{@"name":@"Joffray.Lannister",@"age":@18}; // 注意是大括号15     NSLog(@"dic1 = %@\ndic2 = %@\ndic3 = %@\ndic0 = %@",dic1,dic2,dic3,dic0);16     17     // 取键值18     id obj1 = [dic0 objectForKey:@"name"];19     id obj2 = dic1[@"name"];20     NSLog(@"%@  %ld",obj1,obj2,dic0.count);21     22     // 创建可变字典23     NSMutableDictionary *mdic1 = [NSMutableDictionary dictionary];24     25     // 添加元素26     [mdic1 setObject:@"Robb.Stark" forKey:@"name"];27     [mdic1 setObject:@17 forKey:@"age"];28     [mdic1 setObject:@"He is dead" forKey:@"life"];29     [mdic1 setObject:@"Sansa" forKey:@"name"];  // 将原有name覆盖30     NSLog(@"%@",mdic1);31     32     // 取键值33     id obj3 = mdic1[@"name"];34     NSLog(@"%@",obj3);35     36     // 删除键值对37     [mdic1 removeObjectForKey:@"age"];38     39     // 遍历字典40     //NSArray *array1 = [mdic1 allValues];41     //NSLog(@"%@",array1);42     for(id obj in [mdic1 allValues])43     {44         NSLog(@"value  %@",obj);50     }51     52     [mdic1 enumerateKeysAndObjectsUsingBlock:^(id key,id obj,BOOL *stop)53      {54          NSLog(@"key: %@  %@    key --- %@",obj,key);61     }62     63     // 字典元素的访问64     NSArray *person = @[65     @{@"name":@"Himym.Baratheon",@"age":@25,@"QQ":@"395696600",@"girlfrends":@[@"NaNa",@"ZhaoChao"]},66     @{@"name":@"Joffray.Lannister",@"age":@18},67     @{@"name":@"Ned.Stark",@"age":@31},68     @{@"name":@"Serse.Lannister",@"age":@24}69     ];70     NSDictionary *ned = person[2];71     NSString *nana = person[0][@"girlfrends"][1];72     NSArray *girl = person[0][@"girlfrends"];73     NSLog(@"%@\n%@\n%@",ned,nana,girl);74     75     return 0;76 }

注意的问题:

> 字典的快速创建是用大括号@{},这点有别于数组的快速创建@[]。并且快速创建只适用于NSDictionary。

> 字典里面的键值对是无序排列的,而数组里的元素是有序的。

 

黑马程序员-Foundation框架之数组和字典