iOS - Swift Dictionary 字典
前言
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 字典的更多相关文章
- swift Dictionary 字典
// // main.swift // 字典 // // Created by zhangbiao on 14-6-15. // Copyright (c) 2014年 理想. All rig ...
- [BS-02] iOS数组、字典、NSNumber 新写法—— @[]、@{}
IOS数组.字典.NSNumber 新写法—— @[].@{} //标准写法 NSNumber * number = [NSNumber numberWithInt:]; NSArray * ar ...
- Swift - 从字典(或者Alamofire)直接创建Model文件的工具
Swift - 从字典(或者Alamofire)直接创建Model文件的工具 效果 1. 常规生成model的方式 2. 通过debug创建model的方式 特性 1. 可以处理JSON格式的字典数据 ...
- 你能熟练使用Dictionary字典和List列表吗?(转)
命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...
- (转)C#中的Dictionary字典类介绍
关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/11/07/csharp-dictionar ...
- C#中的Dictionary字典类介绍
Dictionary字典类介绍 必须包含名空间System.Collection.Generic Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 键必须是 ...
- dictionary(字典)
dictionary(字典): 字典对象 字典是一种key - value 的数据类型,使用就像我们上学用的字典,通过笔划.字母来查对应页的详细内容. 1. dic={"n ...
- C# Dictionary 字典
C#中的Dictionary字典类介绍 关键字:C# Dictionary 字典 作者:txw1958原文:http://www.cnblogs.com/txw1958/archive/2012/ ...
- 关于Dictionary字典和List列表
命名空间System.Collections.Generic中有两个非常重要,而且常用的泛型集合类,它们分别是Dictionary<TKey,TValue>字典和List<T> ...
随机推荐
- 坑爹的SQL ISNUMERIC
select ISNUMERIC('01,02') ISNUMERIC返回 1,后面用patindex代替了...折腾/ select patindex('%[^0-9]%','01,02')
- [转]Dynamics AX and Generic collections of .Net
转自:http://blogs.msdn.com/b/emeadaxsupport/archive/2009/04/23/dynamics-ax-and-generic-collections-of- ...
- SQLServer学习笔记<>日期和时间数据的处理(cast转化格式、日期截取、日期的加减)和 case表达式
日期和时间数据的处理. (1)字符串日期 ‘20080301’,这一串为字符串日期,但必须保证为四位的年份,两位的月份,两位的日期.例如,查询订单表日期大于‘20080301’.可以这样写: 1 se ...
- easyui datagrid 每条数据后添加操作按钮
easyui datagrid 每条数据后添加“编辑.查看.删除”按钮 1.给datagrid添加操作字段:字段值 <table class="easyui-datagrid" ...
- ACM题目————The Blocks Problem
代码参考:http://www.hankcs.com/program/uva-q101-the-blocks-problem.html Description Background Many area ...
- 浪首登录浮层增加收藏入口项目学到的几点知识-IE7 bug、relatedTarget、字符串换行
这两天做这个项目略有收获,记录如下: 1. 项目中有个bug,在IE7中登录成功时下拉菜单没有展开的情况下总有个残影在页面中,如下图所示: 通过多种方法都没有解决,后来才知道原来是在IE中displa ...
- Android 静默安装
有时候我们需要软件实现静默安装,但是Android并未提供相应的API,然而我们知道命令行安装android的时候是不会提示用户的,所有要实现这个功能,我们就可以从执行命令行的方式实现.android ...
- GOICE项目初探
GOICE项目初探 在图像拼接方面,市面上能够找到的软件中,要数MS的ICE效果.鲁棒性最好,而且界面也很美观.应该说有很多值得学习的地方,虽然这个项目不开源,但是利用现有的资料,也可 ...
- Unix下五种IO模型
http://blog.chinaunix.net/uid-25324849-id-247813.html 1. I/O模型 Unix下共有五种I/O模型 a. 阻塞I/O b. 非阻塞I/O c. ...
- hiho 第119周 最大权闭合子图
描述 周末,小Hi和小Ho所在的班级决定举行一些班级建设活动. 根据周内的调查结果,小Hi和小Ho一共列出了N项不同的活动(编号1..N),第i项活动能够产生a[i]的活跃值. 班级一共有M名学生(编 ...