过滤数组并将元素添加在一起

负肌

我读了我创建的随机文本文件

hard        toffee        10
hard        toffee        20
...
chewy       gum           40
soft        marshmallow   20
hard        toffee        30   
soft        marshmallow   40

我创建了一个糖果/糖果对象数组,并像这样存储它:

var candyArray = [
Candy(consistency: "hard", type: "toffee", cost: 10),
...
Candy(consistency: "soft", type: "marshmellow", cost: 40)]

可以通过其属性访问每个对象:

print(\(candyArray[0].type))
// prints toffeee

我想遍历数组,如果一致性很难,我想+ =用于存储硬糖成本总和的变量的成本。我想对其他一致性执行相同的操作,然后将它们进行比较,以了解总结起来哪个成本最大。任何帮助将不胜感激。这是我到目前为止的内容:

struct Candy {
    var consistency: String
    var type: String
    var cost: Double

    init(consistency: String, type: String, cost: Double) {
        self.consistency = consistency
        self.type = type
        self.cost = cost
    }

}

var candyArray = [
    Candy(consistency: "hard", type: "toffee", cost: 40),
    Candy(consistency: "hard", type: "toffee", cost: 5),
    Candy(consistency: "hard", type: "toffee", cost: 5),
    Candy(consistency: "soft", type: "marshmallow", cost: 30),
    Candy(consistency: "soft", type: "marshmallow", cost: 35),
    Candy(consistency: "chewy", type: "gum", cost: 35)

]

print("\(candyArray[0].type)")

var x = 0
var largestValue = 0.0
var tempValue = 0.0

var currentConsistency = candyArray[x].consistency
var mostExpensiveConsistency = ""


while (x < candyArray.count){
    if (currentConsistency == candyArray[x].consistency) {
        tempValue += candyArray[x].cost
    } else if (currentConsistency != candyArray[x].consistency) {
        tempValue = 0
        currentConsistency = candyArray[x].consistency
    }

    if (tempValue > largestValue) {
        largestValue = tempValue
        mostExpensiveConsistency = currentConsistency
    }
    x+=1
}

print(" largest value: \(largestValue) and most expensive consistency: \(mostExpensiveConsistency)")

如我在上面提到的文本文件中未对一致性类型进行排序时,该代码不起作用。我正在考虑创建一个二维数组或字典,并将一致性作为键存储,并将总和作为每个一致性的值存储,这样,如果再次出现一致性,我可以将其添加到先前存储在数组/字典中的总和中。我希望我有道理。我只是想知道是否有更快的方法。

牧羊人大卫

您可以使用Array.reduce(into:)创建一个Dictionary,其键为一致性,值为具有一致性的糖果成本之和。然后,你可以简单地找到通过简单地调用最昂贵的一致性类型max(by:)Dictionary

let candiesByConsistency = candyArray.reduce(into: [String:Double](), { accumulatedResults, current in
    accumulatedResults[current.consistency, default: 0] += current.cost
})

let mostExpensiveConsistency = candiesByConsistency.max(by: { $0.value < $1.value })

candiesByConsistency给定示例数组的值将为

[“软”:65,“硬”:50,“耐嚼”:35]

并且mostExpensiveConsistency

(键“软”,值65)`

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

将数组中的元素添加在一起时遇到麻烦

尝试将数组的元素添加在一起

连接两个表并将列值添加在一起

如何检查反向 Pandas DF 列并将它们添加在一起

将类的元素加在一起

索引序列将数组加在一起

Javascript将数组值加在一起

如何通过索引将列表中的多个元素添加在一起?

Swift将数组中的所有元素加在一起

每次循环迭代时将可变数量的数组元素加在一起

如何从窗体将数组添加在一起并将其添加到数据库的一个字段中?

您如何从多个条目添加用户输入,并将它们添加在一起

如何在模板数组类中重载 + 运算符以将具有相同索引的每个元素添加在一起

通过在 numpy/sparse 中将 n^dim 元素添加在一起进行下采样

我如何合并 2 个数组,如果重复,这些需要添加在一起

如何从要添加在一起的对象数组中提取仅数值。发票生成器问题

将值加在一起并将它们分配给特定键?

Java泛型并将数字加在一起

打印数字的力量并将它们加在一起

Javascript获取对象内部的值并将它们加在一起?

SQL存储过程结合了类似的材料并将长度加在一起

尝试从行尾获取值并将它们加在一起

查找字符串中的数字并将其加在一起

如何遍历列表并将成员加在一起

PowerShell 执行 2 个 SQL 查询并将结果加在一起

从不同的 .txt 文件中获取 INT 并将它们加在一起

过滤一行中的相同值 将相同的值加在一起

javascript将对象数组的数组加在一起

尝试将一些 Js 字符串添加在一起