在 Swift 中将两个数组合并为一个字典
Combine two arrays to one dictionary in Swift
我有两个数组:
let data = ["12 Mai 2021", "12 Mai 2021"]
let prices = [45.0, 50.0]
现在我想像这样把这两个变成一个字典:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
如果输出是这样就更好了:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
但我不知道那是否可能....
在这个板上,我已经偶然发现了“zip”解决方案,如下所示:
var dictionary = [String: Double]()
zip(data, prices).forEach { dictionary[[=14=]] = }
print(dictionary)
但这不知何故只是打印:
["12 Mai 2021": 50.0]
有人知道可行的解决方案吗?提前致谢!
你说你想要这个Dictionary
:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
但这是不可能的。 Dictionary
中的每个键都必须是唯一的。密钥"12 Mai 2021"
不能使用两次。
然后你说你更喜欢这个“输出”:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
这是一对数组(二元组),您可以使用 zip
:
得到答案
let pairs = zip(data, prices).map { [=12=] }
// Type of pairs is [(String, Double)].
如果您真的想要 Dictionary
,那么您必须决定如何处理重复键。也许您希望每个日期键都映射到该日期价格的 数组 。这是一种方法:
let d = Dictionary(zip(data, prices.map { [[=13=]] })) { [=13=] + }
// Result: ["12 Mai 2021": [45.0, 50.0]]
上面的代码是这样做的。
prices.map { [[=19=]] }
将 prices
从 [Double]
转换为 [[Double]]
,即转换为 Double
的数组,其中每个内部数组只包含一个价格:[[45.0], [50.0]]
.
zip
将日期和单一价格数组组合成对:[("12 Mai 2021", [45.0]), ("12 Mai 2021", [50.0])]
.
Dictionary
初始化程序将对数组转换为 [String: [Double]]
。当它找到重复键时,它会使用闭包 { [=29=] + }
组合相应的值。这里,[=30=]
和 </code> 都是一个 <code>[Double]
,所以闭包连接数组。
我有两个数组:
let data = ["12 Mai 2021", "12 Mai 2021"]
let prices = [45.0, 50.0]
现在我想像这样把这两个变成一个字典:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
如果输出是这样就更好了:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
但我不知道那是否可能.... 在这个板上,我已经偶然发现了“zip”解决方案,如下所示:
var dictionary = [String: Double]()
zip(data, prices).forEach { dictionary[[=14=]] = }
print(dictionary)
但这不知何故只是打印:
["12 Mai 2021": 50.0]
有人知道可行的解决方案吗?提前致谢!
你说你想要这个Dictionary
:
["12 Mai 2021":45.0, "12 Mai 2021":50.0]
但这是不可能的。 Dictionary
中的每个键都必须是唯一的。密钥"12 Mai 2021"
不能使用两次。
然后你说你更喜欢这个“输出”:
[("12 Mai 2021",45.0),("12 Mai 2021",50.0)]
这是一对数组(二元组),您可以使用 zip
:
let pairs = zip(data, prices).map { [=12=] }
// Type of pairs is [(String, Double)].
如果您真的想要 Dictionary
,那么您必须决定如何处理重复键。也许您希望每个日期键都映射到该日期价格的 数组 。这是一种方法:
let d = Dictionary(zip(data, prices.map { [[=13=]] })) { [=13=] + }
// Result: ["12 Mai 2021": [45.0, 50.0]]
上面的代码是这样做的。
prices.map { [[=19=]] }
将prices
从[Double]
转换为[[Double]]
,即转换为Double
的数组,其中每个内部数组只包含一个价格:[[45.0], [50.0]]
.zip
将日期和单一价格数组组合成对:[("12 Mai 2021", [45.0]), ("12 Mai 2021", [50.0])]
.Dictionary
初始化程序将对数组转换为[String: [Double]]
。当它找到重复键时,它会使用闭包{ [=29=] + }
组合相应的值。这里,[=30=]
和</code> 都是一个 <code>[Double]
,所以闭包连接数组。