Swift 字典Dictionary

一天一步,永远大踏步向前进

我保证,昨天周五,下班后玩了几局游戏,然后才开始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!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值