Foundation框架(三) — NSDictionary、NSMutableDictionary

在Objective-C中,字典就是关键字及其定义(描述)的集合。Cocoa中的实现字典的类是NSDictionary,形式是在给定的关键字(通常是一个NSString)下存储一个数值(可以是任何类型的对象)。然后你就可以用这个关键字来查找相应的数值,通常称之为键值对。不同于数组,字典(也被称为散列表或关联数组)使用的是键查询的优化存储方式,存储形态是无序的,它可以立即找出要查询的数据,而不需要遍历整个数组进行查找。

1.NSDictionary

常用创建方式

// 创建了一个永远为空的字典

NSDictionary*dict1=[NSDictionarydictionary];

// 创建有一组键值对的字典 (常用)

NSDictionary*dict2=[NSDictionarydictionaryWithObject:@"jack"forKey:@"name"];

// 获得字典内的键值对的个数

NSLog(@"count = %lu",dict2.count);

NSLog(@"dict2 = %@",dict2);

// 创建多组键值对的字典 (常用)

NSArray*values=@[@"jack",@"male",@"19"];

NSArray*keys=@[@"name",@"sex",@"age"];

NSDictionary*dict3=[NSDictionarydictionaryWithObjects:values forKeys:keys];

NSLog(@"dict3 = %@",dict3);

// 创建多组键值对的字典 (不建议使用)

NSDictionary*dict4=[NSDictionarydictionaryWithObjectsAndKeys:

@"jack",@"name",@"male",@"sex",@"19",@"age",

nil];// 这个方法不建议使用,因为值和键对应关系不好辨识

NSLog(@"dict4 = %@",dict4);

// 快速创建字典 (常用)

// 快速创建是编译器特性的语法,在编译器看到@{}语法时,会自动展开成dict3的方法

NSDictionary*dict5=@{@"name":@"jack",

@"sex":@"male",

@"age":@"19"};

NSLog(@"dict5 = %@",dict5);

// 根据已有字典创建新字典

NSDictionary*dict6=[NSDictionarydictionaryWithDictionary:dict5];

NSLog(@"dict6 = %@",dict6);

Foundation框架(三) — NSDictionary、NSMutableDictionary_第1张图片

一般来说,类方法初始化都会有相应的实例方法与之对应。

常用方法

// 字典中不允许出现同名的key(只有其中一个会被添加成功), 但是可以出现相同的value, key的类型可以不是NSString型

NSDictionary*dict=@{

@"name":@"jack",

@"sex":@"man",

@"name2":@"jack",

@10:@20,

};

NSLog(@"count = %lu",dict.count);

NSLog(@"dict = %@",dict);

// 查看键对应的值 (参数类型为任何OC对象)

NSNumber*num=[dict objectForKey:@10];

NSLog(@"num = %@",num);

// 查看键对应的值(参数类型必须是NSString)

NSLog(@"sex = %@",[dict valueForKey:@"sex"]);

// 快速访问键值对

NSLog(@"快速访问:%@",dict[@"name"]);// 编译器特性的语法,编译器在看到这种语法时,会自动展开为objectForKey:方法

// 获取所有value为@"jack"的key

NSLog(@"all keys which value == jack :%@",[dict allKeysForObject:@"jack"]);

// 获取字典中所有的键的集合

NSLog(@"allkeys: %@",dict.allKeys);

// 获取字典中所有的值的集合

NSLog(@"allvalues: %@",dict.allValues);

// 获得字典的内容(描述)

NSLog(@"description: %@",dict.description);

Foundation框架(三) — NSDictionary、NSMutableDictionary_第2张图片

你可能感兴趣的:(Foundation框架(三) — NSDictionary、NSMutableDictionary)