Swift - 字典 (Dictionary)

字典 (Dictionary)

  1. 存储同类型值的容器;
  2. 键(key)是字典中的这个值数据(value)的唯一标识符;
  3. 目前 Swift 的 Dictionary 类型被桥接到 Foundation 的 NSDictionary 类;
  4. 一个字典的 Key 类型必须遵循 Hashable 协议,就像 Set 的值类型;

创建

// 1. 创建一个可变的空字典
var dictName = [Int: String]()
// 2. 使用字典字面量创建(: [String: String]可省略)
var dictName: [String: String] = ["key1": "Value1", "key2": "Value2"]

添加

// 1. 使用下标语法
dictName["newKey"] = "newValue"
// 2. 使用特定方法
updateValue(_:forKey:)

删除

// 1. 使用下表语法
dictName["oldKey"] = nil
// 2. 使用特定的方法
removeValue(forKey:)

修改

// 1. 使用下标语法
dictName["oldKey"] = "newValue"
// 2. 使用特定方法
updateValue(_:forKey:)

遍历

/*
 * 1. 遍历键值对
 * 我们可以使用 for-in 循环来遍历某个字典中的键值对。每一个字典中的数据项都以 (key, value) 元组形式返回,并且我们可以使用临时常量或者变量来分解这些元组
 */
 for (keyName, valueName) in dictName {
    print("\(keyName): \(valueName)")
}

/*
 * 2. 遍历字典的键或者值
 * 通过访问 keys 或者 values 属性
 */
 for keyDesc in dictName.keys {
    print("Key: \(keyDesc)")
}

for valueDesc in dictName.values {
    print("Value: \(valueDesc)")
}

Others

// 1. 通过字典的只读属性 count 来获取某个字典的数据项数量
dictName.count
// 2. 布尔属性 isEmpty 检查 count 是否为0
dictName.isEmpty
// 3. Swift 的字典类型是无序集合类型。为了以特定的顺序遍历字典的键或值,可以对字典的 keys 或 values 属性使用 sorted() 方法
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Swift 的标准字典类型 `Dictionary` 并不是线程安全的,因此在并发场景下使用可能会出现问题。为了实现线程安全的字典,可以使用 `DispatchQueue` 和 `ConcurrentDictionary`。 下面是一个简单的线程安全字典的实现: ```swift final class ConcurrentDictionary<Key: Hashable, Value> { private let queue = DispatchQueue(label: "ConcurrentDictionary", attributes: .concurrent) private var dictionary: [Key: Value] = [:] subscript(key: Key) -> Value? { get { var result: Value? queue.sync { result = dictionary[key] } return result } set(newValue) { queue.async(flags: .barrier) { self.dictionary[key] = newValue } } } var keys: [Key] { var result: [Key] = [] queue.sync { result = Array(dictionary.keys) } return result } var values: [Value] { var result: [Value] = [] queue.sync { result = Array(dictionary.values) } return result } } ``` 这个字典的实现使用了一个 `DispatchQueue` 来保证对字典的访问是线程安全的。`ConcurrentDictionary` 实现了 `subscript`、`keys` 和 `values` 方法,它们都采用了不同的 dispatch 方法来执行读取和写入操作。其中,`subscript` 方法采用了 `sync` 方法,它会等待队列中所有任务执行完毕后才返回结果;而 `keys` 和 `values` 方法使用了 `async` 方法并传递了 `.barrier` 标志,它会等待队列中所有读取操作完成后再执行写入操作。 使用时,可以像使用普通字典一样使用这个线程安全字典,例如: ```swift let dict = ConcurrentDictionary<String, Int>() dict["one"] = 1 dict["two"] = 2 print(dict.keys) print(dict.values) ``` 需要注意的是,这个线程安全字典的实现并不是最优的,如果需要更高的性能,可以考虑使用更复杂的数据结构,例如 `ConcurrentHashmap`。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

依旧风轻

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值