gpt4 book ai didi

swift - 将 Swift 数组转换为带索引的字典

转载 作者:行者123 更新时间:2023-11-30 11:07:36 27 4
gpt4 key购买 nike

我使用的是 Xcode 6.4

我有一个 UIView 数组,我想转换为带有键 "v0", "v1"... 的字典。就像这样:

var dict = [String:UIView]()
for (index, view) in enumerate(views) {
dict["v\(index)"] = view
}
dict //=> ["v0": <view0>, "v1": <view1> ...]

这可行,但我正在尝试以更实用的方式做到这一点。我想我必须创建 dict 这让我很困扰。多变的。我很想使用enumerate()reduce()像这样:

reduce(enumerate(views), [String:UIView]()) { dict, enumeration in
dict["v\(enumeration.index)"] = enumeration.element // <- error here
return dict
}

这感觉更好,但我收到错误:Cannot assign a value of type 'UIView' to a value of type 'UIView?'我已经尝试过使用 UIView 以外的对象进行此操作(即: [String] -> [String:String] ),我得到了同样的错误。

有什么清理这个问题的建议吗?

最佳答案

尝试这样:

reduce(enumerate(a), [String:UIView]()) { (var dict, enumeration) in
dict["\(enumeration.index)"] = enumeration.element
return dict
}

Xcode 8 • Swift 2.3

extension Array where Element: AnyObject {
var indexedDictionary: [String:Element] {
var result: [String:Element] = [:]
for (index, element) in enumerate() {
result[String(index)] = element
}
return result
}
}

Xcode 8 • Swift 3.0

extension Array  {
var indexedDictionary: [String: Element] {
var result: [String: Element] = [:]
enumerated().forEach({ result[String($0.offset)] = $0.element })
return result
}
}

Xcode 9 - 10 • Swift 4.0 - 4.2

使用 Swift 4 reduce(into:) 方法:

extension Collection  {
var indexedDictionary: [String: Element] {
return enumerated().reduce(into: [:]) { $0[String($1.offset)] = $1.element }
}
}
<小时/>

使用 Swift 4 Dictionary(uniqueKeysWithValues:) 初始化器并从枚举集合中传递一个新数组:

extension Collection {
var indexedDictionary: [String: Element] {
return Dictionary(uniqueKeysWithValues: enumerated().map{(String($0),$1)})
}
}

关于swift - 将 Swift 数组转换为带索引的字典,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52528595/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com