ios - 俱乐部对象数组

标签 ios arrays swift sorting generics

是否有任何有效的方法来组合对象数组?我有一个模型 [sales],它有 saleAmount, soldBy。不同的客户可能会出售多种商品。所以我想要的是,如果元素由 ABC 销售,那么我想对 ABC 销售的 saleAmount 求和。下面给出了一个例子。

class Sale  {

    var soldBy : String = "" 
    var saleAmount : Double = 0.00
}
var sales : [sale] = [sale]()

sales array contains:
[
["ABC", 1200.34],
["ABC", 999.34],
["ABC", 3499.99],
["DEF", 333.32],
["DEF", 778.12]
]

Expected output :
[["ABC", 5699.67],
["DEF" , 1111.44]]

最佳答案

拥有:

struct Sales {
    let name: String
    let amount: Float

    init(name: String, amount: Float) {
        self.name = name
        self.amount = amount
    }
}

我会补充:

extension Sales {
    init(withSales initialSales: Sales, otherSale: Sales) {
        self.init(name: initialSales.name, amount: initialSales.amount + otherSale.amount)
    }
}

我将使用reduce(into:_:):

let sales: [Sales] = [Sales(name: "ABC", amount: 1200.34),
                      Sales(name: "ABC", amount: 999.34),
                      Sales(name: "ABC", amount: 3499.99),
                      Sales(name: "DEF", amount: 333.32),
                      Sales(name: "DEF", amount: 778.12)]

let reducedSale = sales.reduce(into: [Sales]()) { (currentResult, current) in
    if let existingSalesIndex = currentResult.firstIndex(where: { $0.name == current.name }) {
        let existingSale = currentResult[existingSalesIndex]
        currentResult[existingSalesIndex] = Sales(withSales: existingSale, otherSale: current)

    } else {
        currentResult.append(current)
    }
}

print("reducedSales: \(reducedSales: [AppName.Sales(name: "ABC", amount: 5699.67), AppName.Sales(name: "DEF", amount: 1111.44)])

因为你使用类,你可以避免方便的初始化,而只是添加数量。

关于ios - 俱乐部对象数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53336801/

相关文章:

ios - Xcode存档错误:Actool命令失败,退出代码为255

json - 提交查询以获取带有更新日期字符串的 Json 数据

带有 UITextView 的 iPhone 键盘

ios - 无法使用类型的参数列表调用 'bindToPort'

iphone - iOS 应用程序启动画面使用的尺寸是多少?

c - 我的排序函数给出了意外的输出

订阅和耗材产品的 iOS 应用内购买

大型数组的Java纯粹存在导致大量内存尖峰

python - 如何在不同形状的 ndarray 列表上使用 numpy.amax() ?

swift - 导航栏上后退按钮上的字体(Swift)