前言

	public struct Dictionary<Key : Hashable, Value> : CollectionType, DictionaryLiteralConvertible
public class NSDictionary : NSObject, NSCopying, NSMutableCopying, NSSecureCoding, NSFastEnumeration
  • 字典用于存储无序的数据元素值,它可以存储任何类型的元素,甚至可以将数组作为字典的元素。

1、Dictionary 与 NSDictionary 的相互转换

  • Dictionary 与 NSDictionary 之间可以直接相互转换。Dictionary 转转成 NSDictionary 时,数组中的各项元素被转换为 AnyObject 类型。NSDictionary 转换成 Dictionary 时,数组中的各项元素也被转换为 AnyObject 类型。
	let dictinoary:[String:String] = ["key1":"value1", "key2":"value"]

	// Dictionary 转 NSDictionary

		// Dictionary 转换成 NSDictionary<AnyObject, AnyObject> 型
let nsDictionary1:NSDictionary = dictinoary // Dictionary 转换成 NSDictionary<AnyObject, AnyObject> 型
let nsDictionary2:NSDictionary = dictinoary as NSDictionary // NSDictionary 转 Dictionary // NSDictionary 转换成 Dictionary<AnyObject, AnyObject> 型
let swiftDictionary1:Dictionary = nsDictionary1 as Dictionary // NSDictionary 转换成 Dictionary<String, String> 型
let swiftDictionary2:Dictionary = nsDictionary1 as! [String:String]

2、字典的 创建

	// Dictionary 型字典

		// 创建字典变量,指定数据类型为 Int 型
let dic1 = [String:Int]() // 创建字典变量,Dictionary<String, Int> 等价于 [String:Int]
let dic2 = Dictionary<String, Int>() // 创建字典变量,不指定数据类型
let dic3:Dictionary = ["key1":1, "key2":2] // 创建字典变量,指定数据类型为 Int 型
let dic4:Dictionary<String, Int> = ["key1":1, "key2":2, "key3":3] // 创建字典变量,不指定数据类型
let dic5 = ["key1":1, "key2":2, "key3":3, "key4":4] // 创建指定数据类型的字典
let dic6:[String:Int] = ["key1":1, "key2":2, "key3":3, "key4":4] // 创建指定数据类型的字典
let dic7:[String:AnyObject] = ["key1":1, "key2":2, "key3":"value3", "key4":4] // NSDictionary 型字典 let swiftDictionary = ["key1":1, "key2":2, "key3":3, "key4":4] let nsdic1:NSDictionary = swiftDictionary
let nsdic2:NSDictionary = swiftDictionary as NSDictionary let nsdic3:NSDictionary = NSDictionary(dictionary: swiftDictionary)
let nsdic4:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) let nsdic5:NSDictionary = NSDictionary(object: "nsdic5", forKey: "key1")
let nsdic6:NSDictionary = NSDictionary(objects: ["nsdic6", 2], forKeys: ["key1", "key2"])
let nsdic7:NSDictionary = NSDictionary(dictionaryLiteral: ("key1", "nsdic7"),
("key2", 2),
("key3", 3),
("key4", 4)) // 从 文件 创建字符串
let nsdic8:NSDictionary? = NSDictionary(contentsOfFile: NSHomeDirectory() + "/Desktop/test.txt") // 从 Url 创建字符串
let nsdic9:NSDictionary? = NSDictionary(contentsOfURL: NSURL(fileURLWithPath: NSHomeDirectory() +
"/Desktop/test.txt"))

3、字典元素个数的计算

	// Dictionary 或 NSDictionary 型字典

	let dic = ["key1":1, "key2":2, "key3":3, "key4":4]

	let num:Int = dic.count

4、通过 key 找对应的 value

	// Dictionary 型字典

		var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		// 获取字典中指定 key 对应的值
let value1 = dic["key2"] // NSDictionary 型字典 let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // 获取字典中指定 key 对应的值
let value2:AnyObject? = nsDic["key2"] // 获取字典中指定 key 对应的值
let value3:AnyObject? = nsDic.objectForKey("key2") // 获取字典中指定 key 对应的值,key 的值不存在时返回指定的字符串
let value4 = nsDic.objectsForKeys(["key3", "key4", "key5"], notFoundMarker: "not found")

5、通过 value 找对应的 key

	// NSDictionary 型字典

		let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":3, "key3":3, "key4":4])

		let keys:AnyObject = nsDic.allKeysForObject(3)

6、字典中所有 key 的获取

	// Dictionary 型字典

		let dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		let keys1 = dic.keys

	// NSDictionary 型字典

		let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4])

		let keys2 = nsDic.allKeys

7、字典中所有 value 的获取

	// Dictionary 型字典

		let dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		let values1 = dic.values

	// NSDictionary 型字典

		let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4])

		let values2 = nsDic.allValues

8、字典键值对的 追加

	// Dictionary 型字典

		var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		// key 不存在时,追加键值对(key 值为新增的,若 key 值已存在则为修改对应的 value 值)
dic["key5"] = 5 // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // key 不存在时,追加键值对(key 值为新增的,若 key 值已存在则为修改对应的 value 值)
nsDic["key5"] = 5 // 向字典末尾追加一个字典
nsDic.addEntriesFromDictionary(["key6":6, "key7":7])

9、字典键值对的 修改

	// Dictionary 型字典

		var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		// key 存在时,修改其值
dic["key4"] = 100 // 修改指定的 key 对应的值
dic.updateValue(44, forKey: "key4") // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // key 存在时,修改其值
nsDic["key3"] = 33 // 修改指定的 key 对应的值
nsDic.setObject(100, forKey: "key4") // 修改整个字典
nsDic.setDictionary(["key6":6, "key7":7])

10、字典键值对的 删除

	// Dictionary 型字典

		var dic:Dictionary = ["key1":1, "key2":2, "key3":3, "key4":4]

		// 删除指定 key 对应的值
dic.removeValueForKey("key2") // 删除字典的所有元素
dic.removeAll(keepCapacity: true) // NSDictionary 型字典 let nsDic:NSMutableDictionary = NSMutableDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4]) // 删除指定 key 对应的值
nsDic.removeObjectForKey("key2") // 删除指定 key 对应的值
nsDic.removeObjectsForKeys(["key1", "key4"]) // 删除字典的所有元素
nsDic.removeAllObjects()

11、字典遍历

	// NSDictionary 型字典

		let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":1, "key2":2, "key3":3, "key4":4])

		// for...in 循环

			// 遍历出的为 key-value 的元组, key 不需要可以用 _ 替代
for (_, obj) in nsDic { print(obj)
} // 闭包遍历 nsDic.enumerateKeysAndObjectsUsingBlock { (key:AnyObject, obj:AnyObject, stop:UnsafeMutablePointer<ObjCBool>) in print(obj)
} // 迭代器遍历 // key 迭代器 let keyEnu:NSEnumerator = nsDic.keyEnumerator() while let key:AnyObject = keyEnu.nextObject() { print(nsDic.objectForKey(key))
} // 对象迭代器 let objEnu:NSEnumerator = nsDic.objectEnumerator() while let obj:AnyObject = objEnu.nextObject() { print(obj)
}

12、字典排序

	// NSDictionary 型字典

		let nsDic:NSDictionary = NSDictionary(dictionary: ["key1":"value1", "key2":"value2", "key3":"value3", "key4":"value4"])

		// 用闭包排序

			let keys1 = nsDic.keysSortedByValueUsingComparator { (obj1:AnyObject, obj2:AnyObject) -> NSComparisonResult in

				return (obj1 as! String).compare(obj2 as! String)
} for key in keys1 {
print(nsDic.objectForKey(key))
} // 用指定的方法排序 let keys2 = nsDic.keysSortedByValueUsingSelector(#selector(NSNumber.compare(_:))) for key in keys2 {
print(nsDic.objectForKey(key))
}

iOS - Swift Dictionary 字典的更多相关文章

  1. swift Dictionary 字典

    // //  main.swift //  字典 // //  Created by zhangbiao on 14-6-15. //  Copyright (c) 2014年 理想. All rig ...

  2. [BS-02] iOS数组、字典、NSNumber 新写法—— @[]、@{}

    IOS数组.字典.NSNumber 新写法—— @[].@{}   //标准写法 NSNumber * number = [NSNumber numberWithInt:]; NSArray * ar ...

  3. Swift - 从字典(或者Alamofire)直接创建Model文件的工具

    Swift - 从字典(或者Alamofire)直接创建Model文件的工具 效果 1. 常规生成model的方式 2. 通过debug创建model的方式 特性 1. 可以处理JSON格式的字典数据 ...

  4. 你能熟练使用Dictionary字典和List列表吗?(转)

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

  5. (转)C#中的Dictionary字典类介绍

    关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-dictionar ...

  6. C#中的Dictionary字典类介绍

      Dictionary字典类介绍 必须包含名空间System.Collection.Generic    Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)    键必须是 ...

  7. dictionary(字典)

    dictionary(字典):   字典对象   字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 1.      dic={"n ...

  8. C# Dictionary 字典

    C#中的Dictionary字典类介绍   关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/ ...

  9. 关于Dictionary字典和List列表

    命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...

随机推荐

  1. fprintf 读入%s,要注意

    eg  文件内容faninfd 14   "%s %d",会把整行内容放到%s 而%d是乱码 ps: 文件内容是 1,2,3    “%d,%d,%d” 文件内容是1:2:3   ...

  2. Verilog语法基础讲解之参数化设计

    Verilog语法基础讲解之参数化设计   在Verilog语法中,可以实现参数化设计.所谓参数化设计,就是在一个功能模块中,对于一个常量,其值在不同的应用场合需要设置为不同的置,则将此值在设计时使用 ...

  3. git简介及安装配置

    Git是一种分布式版本控制系统.它和集中式版本控制系统的区别有如下几点: 1).分布式版本控制没有中央服务器,每个人的电脑上都有完整的版本库: 2).分布式管理系统的安全性要高,如果某一台电脑的坏了, ...

  4. ACM题目————士兵杀敌(四)

    描述 南将军麾下有百万精兵,现已知共有M个士兵,编号为1~M,每次有任务的时候,总会有一批编号连在一起人请战(编号相近的 人经常在一块,相互之间比较熟悉),最终他们获得的军功,也将会平分到每个人身上, ...

  5. U3D UGUI学习3 - RectTransform

    总的来说整合了NGUI很多零散功能,比如NGUI2.X处理拉伸要额外套脚本,NGUI3.X开始引入新的锚点.再加上依赖BoxCollider使得整个HUD显示非常乱 而UGUI很清晰明了,你也能看清楚 ...

  6. 二叉搜索树的后序遍历路径(《剑指offer》面试题24)

    题目:输入一个整数数组,判断该数组是不是二叉搜索树的后序遍历序列的结果,如果是,则返回true,如果不是则返回false.假设输入的数组的任意两个数字都互不相同. 分析:在后序遍历得到的序列中,最后一 ...

  7. Python学习笔记-Day2-Python基础之列表操作

    列表的常用操作包括但不限于以下操作: 列表的索引,切片,追加,删除,切片等 这里将对列表的内置操作方法进行总结归纳,重点是以示例的方式进行展示. 使用type获取创建对象的类 type(list) 使 ...

  8. #ifdef DEBUG的理解

    今天看到一段代码,对ifdef的概念比较模糊,于是去学习了一下,找到一个很好的解释,如下: 在工程设置里有一些设置会对该工程自动产生一系列的宏,用以控制程序的编译和运行.就好象楼上说的一样,如果你把代 ...

  9. Mysql--学习笔记(==》简单查询三)

    -- 查看查询数据显示SELECT * FROM student; -- 显示一部分信息的查询SELECT sname 姓名,sscore 成绩,saddress 家庭住址 FROM student; ...

  10. sql通用分页自定义表条件存储过程

    create PROCEDURE PrcTestByPage ( @tablename varchar(50), @selectfilter varchar(100), @orderbyfilter ...