OC基本框架之-字典类型

分类:NSDictionary(不可变数据字典)和NSMutableDictionary(可变数据字典)

组成:

(1)由键-值(Key-Value)对组成的数据集合
?(2)任何对象(id类型)都可以作键,但一般是字符串
?(3)字典内元素无序排列,键相同的的元素不能重复

?(4)可以通过键来快速枚举

一、不可变数据字典

(1)字典的创建和初始化

 1    //1、用一个或多个键值对初始化一个字典对象: 以值,建,值,键,...,nil的顺序
 2     NSDictionary *dict01=[[NSDictionary alloc] initWithObjectsAndKeys:@"key0",@"value0",@"key1",@"value1",@"key2",@"value2", nil];
 3     NSLog(@"dict01:%@",dict01);
 4     NSDictionary *dict1=[NSDictionary dictionaryWithObjectsAndKeys:@123,@"key0",@456,@"key1",@678,@"key2", nil];
 5     NSLog(@"dict1:%@",dict1);
 6     //2、用两个数组初始化一个字典,一个key数组,一个value数组,两个数组大小必须相等,否则Crash
 7     NSArray *[email protected][@"name0",@"name1",@"name2"];
 8     NSArray *[email protected][@"hong",@"wang",@"zhao"];
 9     NSDictionary *dict02=[[NSDictionary alloc] initWithObjects:keyArray forKeys:valueArray];
10     NSDictionary *dict2=[NSDictionary dictionaryWithObjects:valueArray forKeys:keyArray];
11     NSLog(@"dict02:%@",dict02);
12     NSLog(@"dict2:%@",dict2);
13
14     //3、用一个数据字典初始化另一个数据字典
15     NSDictionary *dict03=[[NSDictionary alloc] initWithDictionary:dict1];
16     NSDictionary *dict3=[NSDictionary dictionaryWithDictionary:dict1];
17     NSLog(@"dict03:%@",dict03);
18     NSLog(@"dict3:%@",dict3);

(2)字典对象的创建和保存-文件

    //1、保存字典对象内容到文件
    [dict3 writeToFile:@"/Users/apple/Desktop/tesk.txt" atomically:YES];

    //2、从之前保存的文件读取数据到字典对象
    NSDictionary *dict4=[NSDictionary dictionaryWithContentsOfFile:@"/Users/apple/Desktop/tesk.txt"];
    NSLog(@"dict4:%@",dict4);

(3)字典对象元素的访问

 1     //1、分别获取字典的所有键、值
 2     NSArray *allkeys=[dict1 allKeys];
 3     NSLog(@"allkeys:%@",allkeys);
 4     NSArray *allvalues=[dict1 allValues];
 5     NSLog(@"allvalues:%@",allvalues);
 6
 7     //2、通过指定的key取对应的value对象,没有这个key的话.返回nil
 8     NSNumber *num1 = [dict1 objectForKey:@"key1"];
 9     NSNumber *num2 = [dict1 objectForKey:@"key5"];
10     NSLog(@"%@",num1);
11     NSLog(@"%@",num2);
12
13     //3、获取字典中键值对的个数
14     NSUInteger paircount=[dict2 count];
15     NSLog(@"%lu",paircount);

(4)字典的遍历

1     for (id key in dict1) {
2         id value=[dict1 objectForKey:key];
3         NSLog(@"%@=%@",key,value);
4     }

2015-04-07 21:17:53.933 NSDictionary[5465:226991] dict01:{
    value0 = key0;
    value1 = key1;
    value2 = key2;
}
2015-04-07 21:17:53.934 NSDictionary[5465:226991] dict1:{
    key0 = 123;
    key1 = 456;
    key2 = 678;
}
2015-04-07 21:17:53.934 NSDictionary[5465:226991] dict02:{
    hong = name0;
    wang = name1;
    zhao = name2;
}
2015-04-07 21:17:53.934 NSDictionary[5465:226991] dict2:{
    name0 = hong;
    name1 = wang;
    name2 = zhao;
}
2015-04-07 21:17:53.935 NSDictionary[5465:226991] dict03:{
    key0 = 123;
    key1 = 456;
    key2 = 678;
}
2015-04-07 21:17:53.935 NSDictionary[5465:226991] dict3:{
    key0 = 123;
    key1 = 456;
    key2 = 678;
}
2015-04-07 21:17:53.937 NSDictionary[5465:226991] dict4:{
    key0 = 123;
    key1 = 456;
    key2 = 678;
}
2015-04-07 21:17:53.938 NSDictionary[5465:226991] allkeys:(
    key1,
    key0,
    key2
)
2015-04-07 21:17:53.938 NSDictionary[5465:226991] allvalues:(
    456,
    123,
    678
)
2015-04-07 21:17:53.938 NSDictionary[5465:226991] num1:456
2015-04-07 21:17:53.938 NSDictionary[5465:226991] num2:(null)
2015-04-07 21:17:53.938 NSDictionary[5465:226991] 键值对个数:3
2015-04-07 21:17:53.938 NSDictionary[5465:226991] key1=456
2015-04-07 21:17:53.938 NSDictionary[5465:226991] key0=123
2015-04-07 21:17:53.938 NSDictionary[5465:226991] key2=678

运行结果分析

二、可变数据字典

//可变数据字典初始化

NSMutableDictionary *mDict1=[NSMutableDictionary dictionaryWithObjectsAndKeys:@"aaa",@"name0",@"bbb",@"name1",@"ccc",@"name2", nil];

NSLog(@"%@",mDict1);

//1、加入元素到NSMutableDictionary中  (注意:当key值中存在要添加的键值对中的key值时,则添加,否则覆盖)

[mDict1 setObject:@"ddd" forKey:@"name3"];

[mDict1 setObject:@"eee" forKey:@"name1"];

NSLog(@"add:  %@",mDict1);

//2、查看 中所有元素个数:

NSLog(@"%lu",mDict1.count);

NSNumber *num3 =[mDict1 objectForKey:@"name1"];

NSLog(@"%@",num3);

NSNumber *num4 = [mDict1 objectForKey:@"name10"];

NSLog(@"%@",num4);

//3、添加其他NSMutableDictionary

[mDict1 setValuesForKeysWithDictionary:dict1];

NSLog(@"++++%@",mDict1);

//4、根据key值删除

[mDict1 removeObjectForKey:@"name1"];

NSLog(@"---%@",mDict1);

//5、删除所有

[mDict1 removeAllObjects];

NSLog(@"%@",mDict1);

2015-04-07 22:12:10.717 NSDictionary[5827:248322] add:  {
    name0 = aaa;
    name1 = eee;
    name2 = ccc;
    name3 = ddd;
}
2015-04-07 22:12:10.718 NSDictionary[5827:248322] 4
2015-04-07 22:12:10.718 NSDictionary[5827:248322] eee
2015-04-07 22:12:10.718 NSDictionary[5827:248322] (null)
2015-04-07 22:12:10.719 NSDictionary[5827:248322] ++++{
    key0 = 123;
    key1 = 456;
    key2 = 678;
    name0 = aaa;
    name1 = eee;
    name2 = ccc;
    name3 = ddd;
}
2015-04-07 22:12:10.719 NSDictionary[5827:248322] ---{
    key0 = 123;
    key1 = 456;
    key2 = 678;
    name0 = aaa;
    name2 = ccc;
    name3 = ddd;
}
2015-04-07 22:12:10.719 NSDictionary[5827:248322] {
}

运行结果分析

时间: 2024-08-01 11:10:53

OC基本框架之-字典类型的相关文章

json字符串和字典类型的相互转换

在开发过程中,有时候需要将json字符串转为字典类型,反之亦然,通常采用.Net的开源类库Newtonsoft.Json进行序列化,这里我也是采用这个,不过我更喜欢写扩展方法方便在项目的调用. 首先新建一个扩展类JsonExtensions(类名自己按照自己喜好定义): public static class JsonExtensions { /// <summary> /// 将字典类型序列化为json字符串 /// </summary> /// <typeparam na

OC高效率52之多用类型常量,少用#define预处理指令

// //  ViewController.m //  OC高效率52之多用类型常量,少用#define预处理指令 /**  *     1. 不要用预处理定义常量.这样定义出来的常量不含类型信息,编译器只是会在编译前据此执行查找与替换操作.即时有人重新定义了常量值,编译器也不会产生警告信息,这将导致应用程序中得常量值不一致.        2.在实现文件中使用static const 来定义"只在编译单元内可见的常量".由于此类常量不在全局符号表中,所以无需为其名称加前缀.     

iOS MJExtension框架之字典数组转模型数组

1.下面这样的数组,怎么转成模型     2.分析 3.新增模型:城市分组,城市,区,每个模型都有name,抽一个父类 4.每个模型分别具备的属性 BaseModel : NSObject   属性 NSString *name CitySection : BaseModel  属性 NSArray *cities City : BaseModel 属性 NSArray *districts; 属性 BOOL hot; District : BaseModel  属性  NSArray *nei

用python操作mysql数据库(之数据查询结果返回字典类型)

#!/usr/bin/env python # -*- coding: utf-8 -*- import MySQLdb #建立连接 conn = MySQLdb.connect(host='127.0.0.1',user='root',passwd='1qaz#EDC',db='test_db') cur = conn.cursor(MySQLdb.cursors.DictCursor) #建立游标时,加上"MySQLdb.cursors.DictCursor",让数据查询结果返回字

swift数组与字典类型操作使用

var studentList : [String] = ["张三","李四","王五"]; //数组插入 studentList.insert("刘备",atIndex: 0) //数组追加,每次调用只能追加一个元素 studentList.append("赵云"); //数组追加多元素 studentList += ["关羽","张飞"]; //数组遍历 for

【python】构造字典类型字典

字典类型字典:就是包含字典类型的字典,如{'sss': {'ss': 'dddsdsdsd'}} 构造方式: a={} b="sss" a[b]={} a[b]['ss'] = "dddsdsdsd" print a >>>{'sss': {'ss': 'dddsdsdsd'}} 应用: import sys,os,re oui_dict={} ###构造字典 tmp_fp = open("C:\\Users\\Administrator

Swift2.0(5)元组类型&数组类型&字典类型

元组类型 元组Tuple用来归纳多个归纳具有任意类型的相关联的值,如: var person = (30, "neusoft") print(person)     // (30, "neusoft") 该元组类型对象person的类型可以认为是:(Int, String) 如果想要获取元组中的某个数据,可以采用以下方式 方式一:可以将其中的数据关联到常量或变量中,如: let (age, name) = person print("age:\(age)

python字典类型用法举例

字典是python语言中唯一的映射类型,用花括号{}表示,一个字典条目就是一个键值对,方法keys()返回字典的键列表,values()返回字典的值列表,items()返回字典的键值对列表.字典中的值没有任何限制,它们可以是任意python对象,但字典中的键是有类型限制的,每个键只能对应一个值,且键必须是可哈系的,所有不可变类型都是可哈希的.不可变集合frozenset的元素可作为字典的键,但可变集合set就不行了. 以下是字典类型的常用方法. clear():删除字典中所有元素. copy()

Python中让 MySQL查询结果 返回字典类型的方法

Python的MySQLdb模块是Python连接MySQL的一个模块,默认查询结果返回是tuple类型,只能通过0,1..等索引下标访问数据默认连接数据库: MySQLdb.connect(     host=host,         user=user,         passwd=passwd,         db=db,         port=port,         charset='utf8' ) 复制代码打印: 复制代码代码如下 for row in data: