如何在Swift中将字典切片转换为字典

Jos*_*oid 2 slice swift

我正在尝试转换myDictionary.dropFirst()为缺少一个键的新词典(我不关心哪一个).dropFirst()返回一个切片.我想要一个与之相同类型的新词典myDictionary.

您可以将Array切片转换为这样的数组let array = Array(slice).什么是字典的等价物?如果我尝试字典(切片),我得到编译错误Argument labels '(_:)' do not match any available overloads

提前谢谢了.

Tim*_*len 5

没有DictionarySlice像这样的东西ArraySlice.相反,dropFirst()返回一个Slice<Dictionary>不支持密钥下标的东西Dictionary.但是,您可以Slice<Dictionary>像以下一样循环使用键值对Dictionary:

let dictionary = ["a": 1, "b": 2, "c": 3]

var smallerDictionary: [String: Int] = [:]

for (key, value) in dictionary.dropFirst() {
    smallerDictionary[key] = value
}

print(smallerDictionary) // ["a": 1, "c": 3]
Run Code Online (Sandbox Code Playgroud)

扩展会使这更优雅:

extension Dictionary {

    init(_ slice: Slice<Dictionary>) {
        self = [:]

        for (key, value) in slice {
            self[key] = value
        }
    }

}

let dictionary = ["a": 1, "b": 2, "c": 3]
let smallerDictionary = Dictionary(dictionary.dropFirst())
print(smallerDictionary) // ["a": 1, "c": 3]
Run Code Online (Sandbox Code Playgroud)

不过,我不会真的建议这样做,因为

  • 你不知道将删除哪个键值对,以及
  • 它也不是真正随机的.

但如果你真的想这样做,现在你知道该怎么做了.