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

标签 arrays swift iphone variables merge

我有四个数组列表:

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/

相关文章:

java - 显示我从类中获得的数组

c++ - C++ 对象成员数组的默认初始化?

swift - SKNode() 仅限 360 度 zRotation

ios - 无法打开文件(在项目 "React"的目标 "Pods"中)(在目标 'React' 中)

JavaScript 字符串数组不进行比较

ios - 迭代 StackView,Swift

arrays - 为什么不使用 .map 从 stringArray 中删除最后一个句号

ios - 解析 NSPredicate 中的 UUID

ios - 按下按钮后记录时数据 (char*) 出现损坏

iphone - 如何为Person ViewController的导航栏添加返回按钮?