我试图遍历一个核心数据模型对象并进行如下计算。我想不出有什么循环。这里每个值都乘以每个量,所以for - in
和append
是错误的。我只需要将每个total
乘以它对应的value
(例如amount
与bitcoin
)。
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/