struct Product {
let id: String
let quantity: Int
let price: Double
}
class ProductPrices {
internal static var PricesArray : [String:Double] = ["product1": 5.00,"product2": 5.00,"product3": 5.00]
}
class ProductNames {
internal static var NamesArray : [String:String] = ["product1": "name1","product2": "name2","product3": "name3"]
}
我有这个数组
["product1","product1","product2,"product1","product3","product2"]
我的问题是如何将这些项目放入 Product
预期结果:
Product(id: "name1", quantity: 3, price: 15.00)
Product(id: "name2", quantity: 2, price: 10.00)
Product(id: "name3", quantity: 1, price: 5.00)
最佳答案
输入
所以我们有一个结构
struct Product {
let id: String
let quantity: Int
let price: Double
}
我们还有 2 个字典和 1 个数组
let prices = ["product1": 5.00, "product2": 5.00, "product3": 5.00]
let names = ["product1": "name1","product2": "name2","product3": "name3"]
let elms = ["product1", "product1", "product2", "product1", "product3", "product2"]
输出
现在我们要使用以下逻辑构建一个 Product(s)
数组
Product.id
从names
中获取
Product.quantity
是Product.id
在elms
中出现的次数
Product.price
是产品的价格 *数量
我们可以这样写
let products = names.compactMap { elm -> Product? in
let name = elm.value
let id = name
let quantity = elms.filter { $0 == elm.key }.count
guard quantity > 0, let price = prices[elm.key] else { return nil }
return Product(id: id, quantity: quantity, price: price * Double(quantity))
}
测试
[
Product(id: "name2", quantity: 2, price: 10.0),
Product(id: "name1", quantity: 3, price: 15.0),
Product(id: "name3", quantity: 1, price: 5.0)
]
The
compactMap
method is available in Swift 4.1. For previous versions of Swift please useflatMap
.
关于ios - 将不同的数组合并到另一个数组中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49572220/