如何在保持相同顺序Swift的同时将Array转换为Dictionary

时间:2018-03-03 14:47:13

标签: swift

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

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

outPut:

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&#34; nil&#34;而不是一个很棒的密钥副本。

1 个答案:

答案 0 :(得分:0)

在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)]