美文网首页
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