字典类(十一)

字典类

键值对:key-value

键值对,用一个比喻来说,就是有一堆杂乱的,无序的货物,要怎么样去找到某个货物,并把货物拿出来。那么这里就要用标签去给货物贴上,这样就能在这堆货物里,通过标签,找到自己想要的货物了。

键值对就是类似于这样的存在,我们用一个键key来保存名字,用value来保存实际的值,这样就可以直接通过这个key来取到这个值value。

key相当于货物的标签,value相当于实际的货物。

注意:一堆数据里,key不能重复。

不可变字典NSDictionary:

字典是用来保存具有key-value这样关系的数据的集合的容器。在字典里,key的值在oc里写的时候,可以写重复,但是,在存入对象的时候,相同的key只保存第一个。(严格来说,key的值不能重复)。NSDictionary一旦创建,就不可以修改,不能添加,不能删除,只能通过key来读取value的值。

字典的存放顺序,不是按照个人的意愿进行存放的。而是按照hash算法算出来的值,然后存放的。

字典的创建:initWithObjectsAndKeys


//2015年04月17日11:16:18 北京

//字典

//键值对:(key-value)

//key(键):相当于贴在货物上得标签

//value(值):相当于货物

//通过标签找货物相当于通过key找到value

//NSDictionary(不可变字典)

//value可以重复

//key不能重复(写成重复可以,但是不能存进字典)

//根据哈希(hash)算出来的值的顺序存放的。

NSDictionary *dict1 = [[NSDictionary alloc]initWithObjectsAndKeys:@"value_hello world",@"key_A", @"value_this is a place put value",@"key_B",@"value_Biger then Bigger",@"B",@"CCC",@"C",nil];//以nil作为结束标志

NSLog(@"%@",dict1);/*

2015-04-17 11:30:36.976 OCLesson5_字典[1168:55441] {

B = "value_Biger then Bigger";

C = CCC;

"key_A" = "value_hello world";

"key_B" = "value_this is a place put value";

}

*/

//A:1,B:2,C:3,D:4

NSDictionary *dict2 = [NSDictionary dictionaryWithObjectsAndKeys:@"1",@"A",@"2",@"B",@"3",@"C",@"4",@"D", nil];

NSLog(@"%@",dict2);/*

2015-04-17 11:35:28.484 OCLesson5_字典[1199:56836] {

A = 1;

B = 2;

C = 3;

D = 4;

}

*/

initWithObjectsAndKeys这个方法是其中一个初始化字典的方法,这个方法在初始化的时候,按一对存取,前边是value,后边是key。以nil作为结束标志。

两个数组创建一个字典:dictionaryWithObjects forKeys

这个其实是调用了便利构造器。dictionaryWithObjects这个方法,参数有两个,前边参数是放value得数组,后边的参数是放key的数组。


//两个数组创建一个字典

NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil];

NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr];

NSLog(@"%@",dict3);/*

2015-04-17 11:42:01.087 OCLesson5_字典[1238:58650] {

A = 1;

B = 2;

C = 3;

D = 4;

}

*/

通过key取值:


//两个数组创建一个字典

NSArray *valueArr = [NSArray arrayWithObjects:@"1",@"2",@"3",@"4", nil];

NSArray *keyArr = [NSArray arrayWithObjects:@"A",@"B",@"C",@"D", nil];

NSDictionary *dict3 = [NSDictionary dictionaryWithObjects:valueArr forKeys:keyArr];

//通过key取值             (key的value值)

NSString *s1 = [dict3 objectForKey:@"C"];

NSLog(@"%@",s1);//2015-04-17 11:44:54.895 OCLesson5_字典[1254:59540] 3

count:计算键值对个数


//count说的是键值对的个数,不是key有多少个,value有多少个。

NSUInteger u1 = [dict3 count];

NSLog(@"%lu",u1);//2015-04-17 11:46:50.807 OCLesson5_字典[1268:60069] 4

获取所有key,获取所有value


//获取所有的key,返回一个数组,里边是所有的key

NSArray *keysArr = [dict3 allKeys];

//获取所有的value,返回一个数组,里边是所有的value

NSArray *valuesArr = [dict3 allValues];

NSLog(@"%@",keysArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] (         A,

D,

B,

C

)*/

NSLog(@"%@",valuesArr);/*2015-04-17 11:51:31.940 OCLesson5_字典[1289:61531] (

1,

4,

2,

3

)

*/

注意:

1、字典与数组一样,不能存标量(基本数据类型数据),只能通过NSNumber来把基本数据类型转换成对象,才能存进字典。

2、字典中得所有key不能重复。

3、字典的key是id类型(任意类型(前提是遵守NSCopying协议)),value也是id类型。

4、遵守NSCopying协议

5、不要考虑存放顺序的问题。

一个练习:

打印所有value的值:(1、allValues 2、allKeys + objectForKey)


//练习:dict3打印所有的value值(2种方式)

NSArray *temp1 = [dict3 allValues];

for (int i = 0; i < [temp1 count]; i++) {

NSLog(@"%@",temp1[i]);

}

NSArray *temp2 = [dict3 allKeys];

for (int i = 0; i < [temp2 count]; i++) {

NSLog(@"%@",[dict3 objectForKey:temp2[i]]);

}

可变字典NSMutableDictionary

初始化用init即可


NSMutableDictionary *mdict1 = [[NSMutableDictionary alloc]init];

设置字典:(字典的添加用set,数组用add)


//设置

[mdict1 setObject:@"apple" forKey:@"T1"];

[mdict1 setObject:@"苹果" forKey:@"T2"];

NSLog(@"%@",mdict1);/*

2015-04-17 14:55:50.335 OCLesson5_字典[1615:87301] {

T1 = apple;

T2 = "\U82f9\U679c";

}

*/

删除字典:


[mdict1 removeObjectForKey:@"T1"];

NSLog(@"%@",mdict1);/*

2015-04-17 14:56:44.512 OCLesson5_字典[1625:87641] {

T2 = "\U82f9\U679c";

}

*/

修改字典:


//改

[mdict1 setObject:@"banana" forKey:@"T2"];

NSLog(@"%@",mdict1);/*

2015-04-17 14:58:59.068 OCLesson5_字典[1639:88252] {

T2 = banana;

}

*/

取值:


//查

[mdict1 objectForKey:@"T2"];

清空字典:


//清空字典

[mdict1 removeAllObjects];

时间: 2024-10-20 23:26:44

字典类(十一)的相关文章

python中将普通对象作为 字典类(dict) 使用

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): <strong><span style="color:#ff0000;">self.cfg = cfg</span></strong> de

Swift字典类

在Foundation框架中提供一种字典集合,它是由"键-值"对构成的集合.键集合不能重复,值集合没有特殊要求.键和值集合中的元素可以是任何对象,但是不能是nil.Foundation框架字典类也分为NSDictionary不可变字典和NSMutableDictionary可变字典.一.NSDictionary类 NSDictionary有很多方法和属性,下面总结其常用的方法和属性. initWithDictionary: 构造器,通过Swift的Dictionary创建NSDicti

[转载]python中将普通对象作为 字典类(dict) 使用

目前我知道的有两种方法: 1 定义的类继承dict类 例如 class A(dict): pass a = A() a['name'] = 12 2 给自定义的类添加 __setitem__() __getitem__()方法 class A: def __init__(self, cfg={}): self.cfg = cfg def __setitem__(self, key, value): self.cfg[key] = value def __getitem__(self, key):

Objective-C中字典类

字典是用于保存具有映射关系(key-value对)的数据集合.一个key-value对认为是一个条目(Entry),字典是存储key-value对的容器. 字典类的特点 与数组不同,字典靠key存取元素; key值不能重复,value必须是对象; 键值对在字典中是无序存储的. 字典分为不可变字典(NSDictionary)和可变字典(NSMutableDictionary). 不可变字典(NSDictionary) 字典一旦创建,键值对不可更改,不可添加, 不可删除. 仅能读取key或value

泛型字典类比较

[转] Dictionary<TKey,TValue>, SortedDictionary<TKey,TValue>, SortedList<TKey,TValue>横向评测 Dictionary<TKey,TValue>.SortedDictionary<TKey,TValue>与 SortedList<TKey,TValue>是.NET Framework的三个泛型的关键字查找的类,都属于System.Collections.Ge

C#中的Dictionary字典类介绍

关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-dictionary.html 说明    必须包含名空间System.Collection.Generic     Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)     键必须是唯一的,而值不需要唯一的     键和值都可以是任何类型(比如:string, int, 自定义类型,等等

C#语言实现的简易数据键值对照字典类

最近遇到了一个场景,就是在数据库中没有数据字典的情况下,由C#程序临时维护一组类似数据字典功能的类.功能是可以通过键取出值,通过值取出对应的键(仅取第一个匹配的键),类要求具备一定的可扩展性,可以对一些控件(如ComboBox)进行数据源的初始化.因此我自己设计了一个模式,用于实现这个功能. 1.准备工作 建立一个Windows窗体应用程序,程序集名为DataDictTest,里面包含窗体FormMain 窗体FormMain中包括一个下拉菜单ComboBox,一个放置在DataGridView

列表,元组,字典类的常见简单方法

一.列表(list类) 1.append():追加一个参数,参数可以为字符串,数字或列表等,将参数视为一个整体 2.clear():直接清空列表里的所有 3.count():计算列表里有几个参数 4.extend():扩展列表,且扩展为可迭代对象(for循环之后在加入,比如字符串加入每个字符,列表加入元素) 5.index():找到参数的第一个索引位置,只找从左开始的第一个 6.insert('索引',"参数"):在指定索引插入新元素 7.pop(索引):删除元素且可以再获取引用(不加

C# Dictionary字典类介绍

说明    必须包含名空间System.Collection.Generic     Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)     键必须是唯一的,而值不需要唯一的     键和值都可以是任何类型(比如:string, int, 自定义类型,等等)     通过一个键读取一个值的时间是接近O(1)     键值对之间的偏序可以不定义 使用方法: 1 //定义 2 Dictionary<string, string> openWith = new Dict