[英]Swift: dictionary from array of keys and values
我需要转换一组键和值,例如:
["key1", "value1", "key2", "value2"]
进入字典:
{"key1": "value1", "key2": "value2"}
我可以 go 通过数组一步两步,分别获得键和值的 n 和 n+1,但是有什么聪明的方法吗?
谢谢!
您可以将您的集合分成两个子序列并将它们减少到字典中:
extension Collection {
func unfoldSubSequences(limitedTo maxLength: Int) -> UnfoldSequence<SubSequence,Index> {
sequence(state: startIndex) { start in
guard start < self.endIndex else { return nil }
let end = self.index(start, offsetBy: maxLength, limitedBy: self.endIndex) ?? self.endIndex
defer { start = end }
return self[start..<end]
}
}
}
let kvs = ["key1", "value1", "key2", "value2"]
let dictionary = kvs
.unfoldSubSequences(limitedTo: 2)
.reduce(into: [:]) {
guard $1.count == 2, let key = $1.first, let value = $1.last else { return }
$0[key] = value
}
dictionary // ["key1": "value1", "key2": "value2"]
另一种使用步幅的方法。 这假设您的集合具有偶数个元素:
let kvs = ["key1", "value1", "key2", "value2"]
let dictionary = stride(from: 0, to: kvs.count, by: 2)
.reduce(into: [:]) { $0[kvs[$1]] = kvs[$1+1] }
dictionary // ["key1": "value1", "key2": "value2"]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.