• 【Swift初见】Swift词典



    顾名思义。当我们仰望的时候,我们将基于索引查找我们需要找到的资源。在swift这同样适用,每个对象包括字典key和value。我们key为了找到当前这个key相应的value。与数组不同的是,字典项字典中没有详细的数据存储顺序。



    和Swift中数组类似的。在Swift可变字典与不可变字典只通过let和var的定义来区分,而在OC中是通过NSDictionary和NSMutableDictionary来区分的。

    Swift的字典定义为:(key: value),对于key和value是有限制的,key的唯一限制是可hash的。这样就能保证key是独一无二的,key的address就为:addr = hash(key) , value = hashTavle[addr]。先获取到key的地址,然后在哈希表中通过找到的key的地址来找到value的值。


    字典的构造:
    与数组类似的,字典也有非常多相似的语法:

    var dict = ["key1":"value1" , "key2":"value2"]
    println(dict)

    输出为:[key1: value1, key2: value2]
    我们知道swift具有类型推导的功能。我们不用定义key和value的类型,OS就能帮我们推导出key和value都是String类型。

    我们也能够在申明一个字典的时候定义好字典中key和value的类型。


    var dict2 : Dictionary<String, Int> = ["key1":1, "key2":2]
    println(dict2)

    输出为:[key1: 1, key2: 2]

    当然我们也有一种省略一点的定义方式:
    var dict3 : [String : Int] = ["key3": 3, "key4":4]
    println(dict3)

    输出为:[key4: 4, key3: 3]

    我们也能够像数组一样使用构造语句来创建一个空字典:
    var emptyDict = Dictionary<String, String>()

    此时我们就创建了一个key和value都是字符串的空字典;
    假设我们在创建字典的时候不知道要放什么类型的数据,我们也能够利用swift的类型推导功能在以后加入数据项的时候自己主动推导:
    var emptyDict2 = [ : ]


    数组的操作:
    对数据的基础操作包括增删改查,对字典的操作相同如此:
    对字典新增一项时。我们能够通过下标来加入新的数据项,比方对dict加入一项:
    dict["key3"] = "value3"
    println(dict)

    此时dict中有三项了,输出为:[key1: value1, key3: value3, key2: value2]

    改动字典中某一项的值时也能够用下标来进行操作:
    dict["key1"] = "NOValue"
    println(dict)

    此时的输出就为:[key1: NOValue, key3: value3, key2: value2]
    swift还提供了一个updateValue的方法来更新字典中的值,
    dict.updateValue("123", forKey: "key4")
    println(dict)

    假设key存在则更新key所相应的value。假设key不存在则新增一条记录。

    和数组一样。我们能够通过字典的仅仅读熟悉count来获取字典中的数据项的数量。

    假设我们须要从一个字典中移除某个数据项,有这么2种方式:
    1、用下标的方式来给某个键的相应值赋值为nil。这个该数据项就从字典中移除了:
    dict["key4"] = nil
    println(dict)

    从输出中我们能够明显的看出key4所相应的数据项已经从字典中移除掉了;
    2、用swift提供的函数:removeValueForKey:
    dict.removeValueForKey("key1")
    println(dict)

    3、用removeAll方式来移除全部数据项。




    字典遍历
    还记得在数组的遍历中有2种方式,一种是for-in循环来遍历,一种是enumerate来遍历数据项和索引返回一个元祖,在字典的遍历中有以下几种方式:
    1、for-in循环:

    var dict = ["key1" : "value1" , "key2" : "value2" , "key3" : "value3"]
    
    for key in dict{
        println(key)
    }
    
    for (key,value) in dict{
        println("key is (key) and value is (value)")
    }
    
    for (key, _) in dict {
        println(key)
    }
    
    for (_, value) in dict {
        println(value)
    }


    输出为:

    (key1, value1)
    (key3, value3)
    (key2, value2)
    key is key1 and value is value1
    key is key3 and value is value3
    key is key2 and value is value2
    key1
    key3
    key2
    value1
    value3
    value2


    我们看到这几种方式。第一种直接打印出键值对的值,另外一种我们的条件里面写了一个元组。分别打印key和value,第三种我们加了一个下划线,表示我们不关心第二项value的值,我们仅仅要第一项,第四种方式即我们仅仅关心value的值:


    2、我们能够通过字典的keys熟悉来返回当前字典的全部的key,相同能够返回字典的全部value,
    for keys in dict.keys {
        println(keys)
    }
    
    for values in dict.values {
        println(values)
    }

    字典的keys和values返回的是一个集合,我们能够直接使用keys或者values属性来构造一个新数组:
    let keysArray = Array(dict.keys)
    println(keysArray)

    数据字典条目随机取向,当我们通过字典时。key和value将再次安排,并且顺序不固定。





    欢迎光临指导,共同学习。





  • 相关阅读:
    ASP.NET MVC5中的Model验证
    MVC方式显示数据(数据库)
    MVC方式显示数据(手动添加数据)
    EF数据Linq方式查询
    c# MVC方式文件上传
    调用BAPI创建病患主数据时的问题汇总[BAPI_PATIENT_CREATE]
    [代码]如何上载图片到SAP数据库并显示
    [代码]读取物料BOM行项目长文本[READ_TEXT]
    [问题解决]更新订单BOM中的Qty Var-Sz Item字段失败
    [代码]如何在ALV头中显示Logo图片-[REUSE_ALV_GRID_DISPLAY]
  • 原文地址:https://www.cnblogs.com/mfrbuaa/p/4568351.html
Copyright © 2020-2023  润新知