美文网首页
swift 中字典的简答使用

swift 中字典的简答使用

作者: 90后的晨仔 | 来源:发表于2020-11-21 21:34 被阅读0次

    先使用字典模拟一组数据,然后在下边对其进行操作。

    enum Setting {
        case text(String)
        case ageNum(Int)
        case bool(Bool)
    }
    
    let defaultSettings: [String:Setting] = [
        "Airplane Mode":.bool(false),
        "Name":.text("My iphone"),
        "ageNum":.ageNum(10)
    ]
    
    

    1.更改字典中的值。
    方法一:通过key直接修改值的方式

    /**
     var userSettings = defaultSettings
     作用是把不可变的 ”defaultSettings“  复制一份并且命名为 ”userSettings“
     */
    var userSettings = defaultSettings
    userSettings["Name"] = .text("码农晨仔")
    userSettings["Airplane Mode"] = .bool(true)
    

    方法二:通过updateValue(_:forKey:)方法进行更新。

    let oldName = userSettings.updateValue(.text("小晨晨"), forKey: "name")
    print(userSettings["Name"] ?? "")//输出 ”小晨晨“
    
    let tempAge = userSettings.updateValue(.age(20), forKey: "ageNum")
    print(userSettings["ageNum"] ?? 0)//输出 20“
    

    2.两个字典进行合并可以使用方法merge(_:uniquingKeysWith:)

    说明:该方法会把两个字典中相同的key上的值进行合并。
    第一个参数:”需要进行合并的键值对“。
    第二个参数:定义如何合并相同键的两个值的函数。

    var setting = defaultSettings
    let overriddenSettings:[String:Setting] = ["Name":.text("jiachenzailianxi")]
    setting.merge(overriddenSettings, uniquingKeysWith: {$1})
    print("setting==>\(setting)")
    
    

    3.Dictionary(uniqueKeysWithValues:)

    
    extension Sequence where Element:Hashable {
        var frequencies:[Element:Int] {
            let frequencyPairs = self.map{($0,1)}
            print("frequencyPairs==>\(frequencyPairs)")
            return Dictionary(frequencyPairs,uniquingKeysWith:+)
        }
    }
    
    let frequencies = "hello".frequencies
    print("frequencies + \(frequencies)")
    
    print("==========")
    
    frequencies.filter{$0.value > 1}
    print("frequencies + \(frequencies.filter{$0.value > 1})")
    
    

    4.mapValues让结果继续保持字典的结构。

    let settingAsStrings = settings.mapValues { setting -> String in
        switch setting {
        case .text(let text): return text
        case .age(let number): return String(number)
        case .bool(let value): return String(value)
        }
    }
    print("settingsAsStrings ==> \(settingAsStrings)")
    

    相关文章

      网友评论

          本文标题:swift 中字典的简答使用

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