一天一步,永远大踏步向前进
我保证,昨天周五,下班后玩了几局游戏,然后才开始Swift学习,有点晚了..
不过还好,周六不上班
字典:
其是一种存储相同类型多重数据的存储器.使用key-value的形式来存储,key最为标示符,当然了,这在没有具体顺序的字典中找到想要的value,通过key是很不错的选择.
有没有很崇拜key的感觉?
不会要顶礼膜拜吧,亲?
好啦,上code+注释,亲测可行哟,亲.
顺丰包邮啦:
走起:
//此函数用来管理字典
func managerDictionary(){
//1.创建一个空字典 key-value形式
//Dictionary是创建字典类型的关键字
//<String,String>代表里面存放的值都是String类型的
var dicOne = Dictionary<String,String>()
//那怎么检验呢?赋值就可以了,
//eg:
dicOne = ["魏":"曹操","蜀":"刘备"]
println("the dicOne = \(dicOne)") //the dicOne = [蜀: 刘备, 魏: 曹操]
//这样就完成了赋值,如果我们想要再添加一个值呢?这样的需求很常见吧
//那是不是也很简单呢?那么请看:
//eg:
dicOne = ["吴":"孙权"]
println("the dicOne = \(dicOne)") //the dicOne = [吴: 孙权]
//本来想再追加一个,可是不行啦,这要怎么办哟?
//上面采用了key-value的形式赋值,但字典里没有数组中append这样的方法,那字典应该怎么办?
//这个问题先留着,不过,通过上面的观察,我们发现:
//有时候我们想要清空字典,又该怎么办?就可以使用这个赋值字典就好了
//eg:
dicOne = [:]
println("the dicOne = \(dicOne)") //the dicOne = [:]
//果然被清空了是不是,是不是?
//回到上个问题来,就是每次增加一个key-value,那么请看
dicOne["魏"] = "曹操"
dicOne["蜀"] = "刘备"
println("the dicOne = \(dicOne)") //the dicOne = [蜀: 刘备, 魏: 曹操]
//这样就实现了对字典的增加,用处多多,好处多多哟
//2.用Dictionary指定,并初始化值
var dicTwo : Dictionary<Int , String> = [101 : "小白杨",102 : "NapoleonBai"]
//这样看起来是不是很熟悉呀,没错,就是变量定义的时候见过
//<Int , String> 字典里面的key-value,自己确定类型,Int String 等都可以
println("the dicTwo = \(dicTwo)") //the dicTwo = [102: NapoleonBai, 101: 小白杨]
//那么我们怎么获取呢?比如有时候,我们需要根据key来获取相应地value,
//eg:
var tempDicValue = dicTwo[102]
println("the get value = \(tempDicValue)") //the get value = Optional("NapoleonBai")
//看,得到的值是'NapoleonBai'没错吧,关于这里多了一个Optional<可选的>,这里就代表的是这个tempDicValue可以是任何类型
//类似于Android 开发中的Object对象吧,我们需要一个String类型的,我们可以转换,当然,我们事先就知道这个对象是这个类型
//这里我们就暂时想得这样一帆风顺,这个之后在研究
//那我们就强转为String类型
var tempDicStr = tempDicValue!+""
println("the tempDicStr = \(tempDicStr)") //the tempDicStr = NapoleonBai
//上面加了一个'!',就是强制拆包的意思,主要用于我们强制转换为String类型<在这里是这样>
//3.不使用Dictionary关键字,创建字典
var dicThree = ["keyOne":"小白杨","keyTwo":"大白杨"]
//然后我们发现,我们将key='keyTwo'这个value写错了,需求是'大白菜',所以我们需要更改了
//那么问题来了,怎么更改呢?
//eg:
dicThree.updateValue("大白菜", forKey: "keyTwo")
println("the update after dicThree = \(dicThree)") //the update after dicThree = [keyOne: 小白杨, keyTwo: 大白菜]
//对,你没有看错,就是修改成了大白菜,嘻嘻...
//如果,我不想这么修改怎么办?怎么办?想其他方法呗...
//我千找万找,终于找到了秘诀,所以我们又修改回去
//eg:
dicThree["keyTwo"] = "大白杨"
println("update dicThree = \(dicThree)") //update dicThree = [keyOne: 小白杨, keyTwo: 大白杨]
//果然又回来了,亲爱的小羊们,我又回来了...嘻嘻
//然后是不是又发现了什么呢?我不想要'大白杨'了.什么都不想要了...那好吧,清理它
//eg:
dicThree["keyTwo"] = nil
println("clean apter the dicThree = \(dicThree)") //clean apter the dicThree = [keyOne: 小白杨]
//这样的话,是不是清理了呢?所以:
//dic[key] = value 可以重新赋值或者清理值,是不是很神奇呢?
//那么其他的清理方式呢?
//eg:
//dicThree.removeValueForKey("keyTwo") //移除 key= keyTwo的这个值
//谅解一下下,由于值比较稀少,就不演示这个了
dicThree.removeAll(keepCapacity: true) //移除所有值
println("remove all dicThree = \(dicThree)") //remove all dicThree = [:]
//到现在为止,值就全部gameover了,那么现在我们做什么呢?
//对,没错,将上面的 dicOne赋值给dicThree,好吧,说干就干
//eg:
dicThree = dicOne
println("the dicThree copy dicOne after = \(dicThree)") //the dicThree copy dicOne after = [蜀: 刘备, 魏: 曹操]
//神奇吧:赋值也走得通,哈哈
/*
注意:字典和数组的拷贝是不同的
1.无论何时将一个字典实例赋给一个常量或变量,或者传递给一个函数或方法,这个字典会即会在赋值或调用发生时被拷贝。
2.如果字典实例中所储存的键(keys)和/或值(values)是值类型(结构体或枚举),当赋值或调用发生时,它们都会被拷贝。相反,如果键(keys)和/或值(values)是引用类型,被拷贝的将会是引用,而不是被它们引用的类实例或函数
*/
//然后就就全部打印了,是不是了?
//这里叫遍历字典
//元组形式返回
for (key,value) in dicThree{
println("the key = \(key),value = \(value)")
//the key = 蜀,value = 刘备
//the key = 魏,value = 曹操
}
//果然没错,还是这两个,哈哈,继续走起吧
for tempItem in dicThree{
println("the key = \(tempItem.0),the value = \(tempItem.1)")
//the key = 蜀,the value = 刘备
//the key = 魏,the value = 曹操
}
//还可以通过Dic的keys和values进行遍历,可以一测
}
还是建议将code+注释读通,毕竟小编花了一点时间来写滴.嘻嘻
不读也没有关系啦,只要理解了就好
一步一步,前进,你我一起
come on!