gpt4 book ai didi

arrays - 将多个数组组合/合并为一个

转载 作者:行者123 更新时间:2023-11-30 10:29:52 30 4
gpt4 key购买 nike

我有四个数组列表:

var products: [Product] = []
var addressInfo: [AddressInfo] = []
var favorites: [Favorite] = []
var amounts: [Amount] = []

我想将它们全部合并为一个,所以我只有一个变量:

var combined = [Product/AddressInfo/Favorite/Amount]()

我该如何将它们合并到一个数组中 var cobmbined = [Combined]()

这是我的结构的两个示例:

struct Amount {
var amountsDeliveryCharge: Double
var amountsDriverTip: Double
init(
amountsDeliveryCharge: Double,
amountsDriverTip: Double
){
self.amountsDeliveryCharge = amountsDeliveryCharge
self.amountsDriverTip = amountsDriverTip
}

init(data: [String: Any]){
amountsDeliveryCharge = data[DatabaseRef.deliveryCharge] as? Double ?? 0.0
amountsDriverTip = data[DatabaseRef.driverTip] as? Double ?? 0.0
}

static func modelToData(amount: Amount) -> [String: Any] {
let data : [String: Any] = [
DatabaseRef.deliveryCharge : amount.amountsDeliveryCharge,
DatabaseRef.driverTip : amount.amountsDriverTip
]
return data
}
}

这是另一个结构:

struct Product {
var price: Double
var priceUnit: String
init(
price: Double,
priceUnit: String
){
self.price = price
self.priceUnit = priceUnit
}

init(data: [String: Any]){
price = data[DatabaseRef.price] as? Double ?? 0.0
priceUnit = data[DatabaseRef.priceUnit] as? String ?? ""
}

static func modelToData(product: Product) -> [String: Any] {
let data : [String: Any] = [
DatabaseRef.price : product.price,
DatabaseRef.priceUnit : product.priceUnit

]
return data
}
}

另外两个结构在结构上看起来也相似。

最佳答案

假设每个元素的顺序相同,创建一个具有适当属性的结构

struct Combined {
let product: Product
let addressInfo: AddressInfo
let favourite: Favourite
let amount: Amount
}

然后使用计数器循环遍历数组以进行索引,然后使用memberWise初始化程序创建实例,或者使用静态工厂函数来创建并返回数组:


static func makeFrom(products: [Product], addresses: [AddressInfo], favourites: [Favourite], amounts: [Amount]) -> [Combined] {
guard products.count == addresses.count, addresses.count == favourites.count, favourites.count == amounts.count else {fatalError()}. //handle better in practice
var combined = [Combined]()
for index in 0..<products.count {
combined.append(Combined(product: products[index],
addressInfo: addresses[index],
favourite: favourites[index],
amount: amounts[index])
}
return combined
}

上面的代码检查所有数组的长度是否相同,如果不是,则调用 FatalError()。实际上,您希望比这更好地处理错误。

然后用作:

let combined = Combined.makeFrom(products: products, addresses:addressInfo, favourites: favourites, amounts: amounts)

关于arrays - 将多个数组组合/合并为一个,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59378352/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com