【问题标题】:Add values of grouped dictionary elements based on keys swift快速添加基于键的分组字典元素的值
【发布时间】:2019-01-16 06:01:43
【问题描述】:

我有一个名为“供品”的供品数组。我已经对数组进行了分组,如下所示。

let groupedBonds = Dictionary(grouping: data.offerings) { (Offering) -> String in
            return Offering.company
        }

public struct Offering: Codable {
    public let company: String
    public let amount: Int
    public let location: String
}

字典的键是companies -> ["ABCD", "EFGH", "IJKL", "MNOP"]

我想汇总各个公司的所有金额。请帮助我实现这个结果。

【问题讨论】:

    标签: ios arrays swift dictionary struct


    【解决方案1】:

    假设 data.offerings 等于

    let offerings = [
        Offering(company: "A", amount: 7, location: "a"),
        Offering(company: "A", amount: 4, location: "a"),
        Offering(company: "B", amount: 2, location: "a"),
        Offering(company: "C", amount: 3, location: "a"),
    ]
    

    我想汇总各个公司的所有金额。

      let sumAmountByComany = offerings.reduce(into: [:]) { (result, offer)  in
             result[offer.company] = (result[offer.company] ?? 0 ) + offer.amount
        }
    

    结果

    [
     "C": 3,
     "B": 2,
     "A": 11
    ]
    

    【讨论】:

    • 你也可以使用reduce(into:),这样就不需要var
    【解决方案2】:

    您似乎需要找到所有分组数组的总和,您可以为此使用mapValues

    let amounts = groupedBonds.mapValues { $0.reduce(0) { $0 + $1.amount} }
    

    amounts 将是一个字典,其键与groupedBonds(在本例中为公司名称)具有相同的键,但具有转换闭包的结果作为值,无论巧合与否,它都会计算每个数组的总和.

    【讨论】:

    • 很高兴听到这个消息,如果答案对您有帮助,您可以接受/投票。
    猜你喜欢
    • 2015-03-24
    • 2019-11-07
    • 1970-01-01
    • 1970-01-01
    • 2019-10-16
    • 2020-03-28
    • 1970-01-01
    • 1970-01-01
    • 2021-10-26
    相关资源
    最近更新 更多