在 Swift 中将两个数组合并为一个字典

Posted

技术标签:

【中文标题】在 Swift 中将两个数组合并为一个字典【英文标题】:Combine two arrays to one dictionary in Swift 【发布时间】:2021-05-12 13:55:59 【问题描述】:

我有两个数组:

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[$0] = $1 
print(dictionary)

但这只是打印出来的:

["12 Mai 2021": 50.0]

有人知道可行的解决方案吗?提前谢谢!

【问题讨论】:

12 Mai 2021 是同一日期。第二个将覆盖第一个。 在字典中,键是唯一的,这就是你有“问题”的原因。 ["12 Mai 2021":45.0, "12 Mai 2021":50.0] 不存在。 zip(data, prices).map( ($0.0, $0.1) ) ? Larne 非常感谢您解决了这两个问题! @Larme map 后面的 zip 是不需要的。 zip 已经返回了 map 正在创建的相同元组! 【参考方案1】:

你说你想要这个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)]

这是一组对(2 元组),您可以使用 zip 得到答案:

let pairs = zip(data, prices).map  $0 
// Type of pairs is [(String, Double)].

如果您真的想要Dictionary,那么您必须决定如何处理重复键。也许您希望每个日期键映射到该日期价格的 array。这是一种方法:

let d = Dictionary(zip(data, prices.map  [$0] ))  $0 + $1 
// Result: ["12 Mai 2021": [45.0, 50.0]]

上面的代码就是这样做的。

    prices.map [$0] prices[Double] 转换为[[Double]],即转换为Double 的数组数组,其中每个内部数组仅包含一个价格:[[45.0], [50.0]]

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

    Dictionary 初始化程序将数组对转换为 [String: [Double]]。当它找到重复键时,它使用闭包 $0 + $1 组合相应的值。这里,$0$1 都是 [Double],所以闭包连接了数组。

【讨论】:

字典初始化程序中缺少右括号。另一种选择是将+ 运算符作为uniquingKeysWith 参数Dictionary(zip(data, prices.map [$0] ), uniquingKeysWith: +) 我添加了缺少的关闭括号。这就是您不复制和粘贴代码时会发生的情况。

以上是关于在 Swift 中将两个数组合并为一个字典的主要内容,如果未能解决你的问题,请参考以下文章

如何将两个有序数组合并为一个有序数组,用函数做,一个循环搞定?

JAVA怎么合并两个数组

如何将两个数组合并为一个相应的2d数组?

两个数组交叉合并为一个数组

两个有序数组合并为一个有序数组---python

es6 合并数组