美文网首页
(一) Dictionary 字典__Swift5.5

(一) Dictionary 字典__Swift5.5

作者: 三分只一草履虫 | 来源:发表于2021-10-10 16:48 被阅读0次

    macOS 11.6 Xcode 12.5.3 the swift programming language-Swift 5.5 Time 21/10/10

    1.dictionary 存储的是具有相同类型的 key 与具有相同类型的 value 的之间的对应关系的无序集合. dictionary中的每个 value都具有唯一的 key ,其就是 value 的标识.

    2.dictionary 一般用于基于标识来查找值的情况. ( 基于 具有唯一性的key 来查找其对应的 value )

    3.dictionary 中 key 的类型必须满足 Hasable protocol ( 哈希协议 ), 就像 set 的 value type一样

    4.Swift中字典语法的完整写法是 Dictionary< Key, Value > , eg: Dictionary<Int : String>

    5.Swift中字典语法的简写方法是 [ Key : Value ] , eg: [ Int : String ]

    6.创建 empty dictionary 可以用初始化器语法 [ : ]

    7.用 count( ) property 属性发现 dictionary 有几个 item. eg: 字典名.count( )

    8.用 isEmpty property 属性判断 dictionary 的 count 是不是为 0, eg: 字典名.isEmpty

    9.用 subscript syntax 下标语法 可以 增加 , 获取 或者 修改 dictionary 的item, eg: 字典名[ 键名 ]

    10.增加或修改 dictionary 特定的键 key 对应的value, 也可以用 updateValue (_ : for key : ) method, 其一该方法返回的是一个 optional 类型的值, 其二 用该方法更新一个 item 后,其返回的是一个optinal old value ,也就是说如果原 dictionary 存在该键对应的值, 那么返回的就是这个该键对应的值的可选值,即相对于刚更新的 item 而言, 其返回的不是这个刚更新的 item 的 new value, 而是原来那个键对应的值的可选值,即optional old value; 如果原 dictionary 不存在该键对应的值, 那么更新完( 这里实际是添加 )新的 item 后 ,其返回的optional old value 该键对应的值就是 nil ( 因为不存在.) 因为这键可能发生不存在的情况,所有这也是为什么这个方法返回的类型是 optional 的原因.

    11.移除 dictionary 的一对 key-value 键值对,可以通过给该 key键分配 nil 来实现. eg: 字典名[ 对应的key ] = nil

    12.移除 dictionary 的一对 key-value 键值对,还可以用 removeValue( for key: ) method 来实现, 该方法返回的也是可选值, 如果原 dictionary 存在该键对应的值, 那么就返回该键对应的值的可选值, 如果不存在该键对应的值 ,就返回 nil eg: 字典名.removeValue ( for key: 对应的key )

    13.用 for-in 循环遍历 dictionary 的 每一个item, 可将其decompose分解为 tuple 的形式, eg: for ( key, value ) in 字典名 { XXXX }

    14.可以直接access 访问 dictionary 的 key 和 value property 属性用 eg: 字典名.keys 和 字典名.values

    15.可以用字典的 keys 和 values 属性创建一个 array 的 instance, eg: [类型] ( 字典名.keys )

    var namesOfIntegers: [Int :String] = [:]
    namesOfIntegers[16] = "sixteen"
    namesOfIntegers[9] = "night"
    namesOfIntegers.count       //2
    namesOfIntegers.isEmpty     //false
    namesOfIntegers = [:]
    @6-8 创建空字典,用下标语法给字典添加 item, 计算 item 个数,判断 count 是不是 0
    
    var airPort = [
        "YYZ" : "Toronto Pearson",
        "DUB" : "Dublin"
    ]
    
    airPort["LHR"] = "London"
    airPort["LHR"] = "London Heathrow"
    
    print(airPort)
    
    for (key, value) in airPort {
        print("\(key)  : \(value)")
    }
    
    输出:
    ["LHR": "London Heathrow", "YYZ": "Toronto Pearson", "DUB": "Dublin"]
    LHR  : London Heathrow
    YYZ  : Toronto Pearson
    DUB  : Dublin
    
    @9 下标语法给 dictionary airPort 添加 "LHR" : "London" item,再修改该 item
    
    
    if let optionalOldValue = airPort.updateValue("new value", forKey: "DUB"){
        print("原airport存在DUB的键,返回可选旧值的拆包 \(optionalOldValue)")
    } else{
        print("原airport不存在名为DDBUB的键")
    }
    print(airPort)
    
    let optionalOldValue2 = airPort.updateValue("new value2", forKey: "DDUB")
    print(optionalOldValue2)
    
    print(airPort)
    
    输出:
    原airport存在DUB的键,返回可选旧值的拆包 Dublin
    ["YYZ": "Toronto Pearson", "LHR": "London Heathrow", "DUB": "new value"]
    nil
    ["LHR": "London Heathrow", "DUB": "new value", "YYZ": "Toronto Pearson", "DDUB": "new value2"]
    
    @10 updateValue() 返回的是可选的字符串旧值,故pdateValue()返回的是Optional("Dublin") ,但是这里用了 if let 拆包赋值, 故optionalOldValue 的类型就变成了纯字符串 String,故最后optionalOldValue的值就是 Dublin
    optionalOldValue2 的类型是可选字符串 String? ,具体值是可选旧值,故但由于该键不存在,所以返回的可选旧值是 nil
    
    airPort["LHR"] = nil
    print(airPort)
    
    输出: ["DUB": "new value", "YYZ": "Toronto Pearson", "DDUB": "new value2"]
    @11 移除了 "LHR": "London Heathrow", "DUB"
    
    if let removedItemValue = airPort.removeValue(forKey: "YYZ"){
        print(removedItemValue)
    }else{
        print("不存在该 YYZ 键")
    }
    
    let removedItemValue2 类型是 String? = airPort.removeValue(forKey: "YYZ2")
    print(removedItemValue2)
    输出:
    Toronto Pearson
    nil
    
    @12  removeValue(forKey: ) 返回的是可选旧值,由于原 dictionary 存在 YYZ 键,故返回的是 Optinal("Toronto Pearson"), 但这里用了 if let 拆包赋值,故removedItemValue类型是 String,故值是Toronto Pearson
    由于原 dictionary 不存在 YYZ2 键, 故返回的可选旧值就是 nil,没有 if let 拆包赋值,故removedItemValue2 类型是 String?
    
    
    for (airportCode, airportName) in airPort {
        print("\(airportCode) : \(airportName)")
    }
    输出:
    DUB : new value
    DDUB : new value2
    
    @13 for (键, 值) in 字典名 {  } 遍历 dictionary 的 item
    
    for airportCode in airPort.keys {
        print(airportCode)
    }
    输出:
    DUB
    DDUB
    @14
    
    let airportCodes: [String] = [String](airPort.keys)
    let airportNames = [String](airPort.values)
    print(airportNames)
    输出: ["new value", "new value2"]
    
    @15
    

    相关文章

      网友评论

          本文标题:(一) Dictionary 字典__Swift5.5

          本文链接:https://www.haomeiwen.com/subject/zwbholtx.html