我试图遍历一个核心数据模型对象并进行如下计算。我想不出有什么循环。这里每个值都乘以每个量,所以for - inappend是错误的。我只需要将每个total乘以它对应的value(例如amountbitcoin)。

func updateWalletLabel() {

    var values : [Double] = []

    guard let items : [CryptosMO] = CoreDataHandler.fetchObject() else { return }

    let codes = items.map { $0.code! }
    let amounts = items.map { $0.amount! }

    print(codes) // ["bitcoin", "litecoin"]
    print(amounts) // ["1.00000000", "2.00000000"]
    // please note these values are in correct order (x1 bitcoin, x2 litecoin)

    for code in codes {
        for amount in amounts {

            let convertedAmount = Double(amount)!

            let crypto = code
            guard let price = CryptoInfo.cryptoPriceDic[crypto] else { return }

            let calculation = price * convertedAmount
            values.append(calculation)
        }
    }

    let total = values.reduce(0.0, { $0 + Double($1) } )

    print("VALUES", values) // [7460.22, 14920.44, 142.68, 285.36] (need [7460.22, 285.36])
    print("TOTAL:", total) // 22808.7 (need 7745.58)
}

如何修改这里的1.00000000循环,以便每个数组项只进行一次计算?
谢谢!

最佳答案

当有两个长度相同、顺序相同的数组时,可以使用Swift的zip函数将这两个数组组合成一个元组数组。在这种情况下,循环将更改为

for (code, amount) in zip(codes, amounts) {
    // Your calculation
}

另请参见documentation

关于arrays - 映射核心数据模型对象以进行计算,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/49411819/

10-11 22:29
查看更多