【问题标题】:Add an array to a dictionary将数组添加到字典
【发布时间】:2021-10-29 22:53:01
【问题描述】:
我想在参数中添加更多项,但是 for 循环会覆盖现有数据。
如何使用循环向参数添加更多项目?
var parameters: [String: Any] = [:]
let array = [1111,1112,1113,1114]
for product in array{
parameters["line_items"] = [
["product_id": product, "quantity": 1]
]
}
感谢您的建议
【问题讨论】:
标签:
arrays
swift
loops
dictionary
【解决方案1】:
您需要将字典数组分配给line_items 键。您可以在products 上使用map 轻松做到这一点。
var parameters: [String: Any] = [:]
let products = [1111,1112,1113,1114]
parameters["line_items"] = products.map { product in ["product_id": product, "quantity": 1]}
print(parameters)
【解决方案2】:
一般来说,您应该先为line_items 键创建数组,然后将其分配给字典:
var lineItems = [Any]()
for product in array{
lineItems.append(
["product_id": product, "quantity": 1]
)
}
parameters["line_items"] = lineItems
但正如 Dávid Pásztor 所说,您可以只做一个map:
parameters["line_items"] = array.map {
["product_id": $0, "quantity": 1]
}
如果您有一个包含此数据的 Codable 结构,
struct LineItems : Codable {
let lineItems: [Product]
}
struct Product : Codable {
let productId: Int
let quantity: Int
}
我还建议您使用来自this answer 的DictionaryEncoder 来创建整个字典。
let encoder = DictionaryEncoder()
encoder.keyEncodingStrategy = .convertToSnakeCase
let parameters = try encoder.encode(object)