【问题标题】:How to convert Array to Dictionary while keeping the same order Swift如何在保持相同顺序 Swift 的同时将数组转换为字典
【发布时间】:2018-03-03 14:47:12
【问题描述】:

嘿,我在这里看到了一些非常好的问题。关于如何将数组转换为字典,但问题是不保持相同的顺序示例:

list = ["test", "test2", "test3"]

输出:

listNewFromExt = ["test": "test","test3": "test3", "test2": "test2"]

基本上 test3 正在与 test2 交换位置

代码:

let listNewFromExt = list.toDictionary{($0, $0)}

extension Sequence {
 public func toDictionary<K: Hashable, V>(_ selector: (Iterator.Element) throws -> (K, V)?) rethrows -> [K: V] {
    var dict = [K: V]()
    for element in self {
        if let (key, value) = try selector(element) {
            dict[key] = value
        }
    }

    return dict
}

}

另外,如果您能告诉我如何将 .values 设为“nil”而不是密钥的副本,那就太好了。

【问题讨论】:

  • 字典根据定义是无序的,如果你需要一个有序的集合,你不应该使用字典。

标签: swift


【解决方案1】:

在 Swift 中,Dictionary 在设计上是一个无序集合。因此,从Array 迁移后,您无法对其保持任何顺序。

如果您希望您的值是nil,只需使用

let dict = Dictionary<Int, Any?>(uniqueKeysWithValues: [1, 2, 3].map { ($0, nil) })

计算结果为[2: nil, 3: nil, 1: nil]

如果您想要某种排序(没有双关语),您可以将 dict 转换为排序的元组数组:

let sortedTupleArray = dict.sorted { $0.key > $1.key }

这等于[(key: 3, value: nil), (key: 2, value: nil), (key: 1, value: nil)]

【讨论】:

    猜你喜欢
    • 2020-11-01
    • 1970-01-01
    • 2014-07-02
    • 2012-05-05
    • 1970-01-01
    • 2021-05-14
    • 2021-11-08
    • 2021-12-26
    • 2020-06-09
    相关资源
    最近更新 更多