在 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]]

上面的代码是这样做的。

  1. prices.map { [[=19=]] }prices[Double] 转换为 [[Double]],即转换为 Double 的数组,其中每个内部数组只包含一个价格:[[45.0], [50.0]].

  2. zip 将日期和单一价格数组组合成对:[("12 Mai 2021", [45.0]), ("12 Mai 2021", [50.0])].

  3. Dictionary 初始化程序将对数组转换为 [String: [Double]]。当它找到重复键时,它会使用闭包 { [=29=] + } 组合相应的值。这里,[=30=]</code> 都是一个 <code>[Double],所以闭包连接数组。