You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将重复产品标识数组转换为Product结构体实例集合?

嘿,我来帮你搞定这个需求!咱们可以通过几个简单的步骤把产品ID数组转换成统计好数量、匹配好价格的Product实例集合,具体做法如下:

第一步:先梳理基础定义

首先确保你已经有了这些基础的结构体和类定义(我稍微调整了变量名的大小写,符合Swift的命名规范):

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"]
}

第二步:统计每个产品的出现次数

我们可以用一个字典来累加每个产品ID的数量,遍历输入数组即可完成统计:

let inputProductIds = ["product1","product1","product2","product1","product3","product2"]

// 统计数量的字典,键是产品ID,值是对应数量
var productQuantityMap: [String: Int] = [:]
for id in inputProductIds {
    // 用default下标简化计数:如果键不存在就默认0,然后加1
    productQuantityMap[id, default: 0] += 1
}

第三步:生成Product实例集合

遍历统计好的字典,结合ProductPrices里的价格数据,创建每个Product实例:

var finalProducts: [Product] = []
for (productId, quantity) in productQuantityMap {
    // 安全获取价格:如果ProductPrices里没有对应ID的价格,默认用0.0避免崩溃
    let matchedPrice = ProductPrices.pricesArray[productId] ?? 0.0
    let product = Product(id: productId, quantity: quantity, price: matchedPrice)
    finalProducts.append(product)
}

验证结果

你可以打印出来看看效果:

for product in finalProducts {
    print("产品ID: \(product.id),数量: \(product.quantity),单价: \(product.price)")
}

输出会是:

产品ID: product1,数量: 3,单价: 5.0
产品ID: product2,数量: 2,单价: 5.0
产品ID: product3,数量: 1,单价: 5.0

额外小补充

如果需要把Product实例存到Set里(自动去重,不过这里我们已经统计过了,其实用数组足够),因为Product是结构体,且所有属性都遵守Hashable协议,所以直接让Product遵守Hashable就行(Swift会自动合成实现):

struct Product: Hashable {
    let id: String
    let quantity: Int
    let price: Double
}

之后就可以用Set<Product>来存储了。

另外,如果需要在Product里包含产品名称,只要给结构体加个name属性,创建实例时从ProductNames.namesArray里取就行:

struct Product {
    let id: String
    let name: String
    let quantity: Int
    let price: Double
}

// 创建实例时
let matchedName = ProductNames.namesArray[productId] ?? "未知产品"
let product = Product(id: productId, name: matchedName, quantity: quantity, price: matchedPrice)

内容的提问来源于stack exchange,提问作者Utku Dalmaz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.21 07:13:07