let entrIEs = ["x=5","y=7","z=10"]
到这个
let keyvaluePairs = ["x" : "5","y" : "7","z" : "10"]
我试图使用地图,但问题似乎是一个字典中的键值对不是一个独特的类型,它只是在我的脑海里,但不是在字典类型,所以我不能真正提供一个转换函数,因为那里是没有变化的.加上地图返回一个数组,所以它是一个没有去.
有任何想法吗?
减号错误检查,看起来很像:let foo = entrIEs.map({extension Dictionary { init(elements:[(Key,Value)]) { self.init() for (key,value) in elements { updateValue(value,forKey: key) } }}.componentsSeparatedByString("=") }) .reduce([String:Int]()) { acc,comps in var ret = acc ret[comps[0]] = Int(comps[1]) return ret }
使用地图将[String]转换成分割[[String]],然后使用reduce构建[String:Int]的字典.
或者,通过添加一个扩展到字典:
let dict = Dictionary(elements: entrIEs .map({let dict2 = [String:Int](elements: entrIEs .map({.componentsSeparatedByString("=") }) .map({ ([0],Int([1])!)}))let dict2 = [String:Int](elements: entrIEs.flatMap { let parts = .componentsSeparatedByString("=") if parts.count == 2,let value = Int(parts[1]) { return (parts[0],value) } else { return nil }}).componentsSeparatedByString("=") }) .flatMap({ if .count == 2,let value = Int([1]) { return ([0],value) } else { return nil }}))
(相当有用的扩展名btw,您可以使用它在字典上的很多地图/过滤器 *** 作,真的是一个耻辱,默认情况下不存在)
变得更简单:
当然,你也可以组合两个地图电话,但我更喜欢分解个别的转换.
如果要添加一些错误检查,可以使用flatMap而不是map:
再次,如果你想,你可以明显地将地图合并到flatMap或分开它们为了简单.
总结以上是内存溢出为你收集整理的swift – 有没有声明性的方式将Array转换为Dictionary?全部内容,希望文章能够帮你解决swift – 有没有声明性的方式将Array转换为Dictionary?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)