首页 > 解决方案 > 如何动态填写字典

问题描述

我解析加载到内容中的 CSV 文件:字符串变量。文件的每一行都有三个值,我想使用三个键(autID、autSName、autFName)填充字典。我在下面写了代码

var valuesDict = Dictionary<String,Any>()
let dataRows = content.components(separatedBy: "\n")

for dataRow in dataRows {
    let values = dataRow.components(separatedBy: ";")
    if Int64(values[0]) != nil {
        valuesDict.updateValue(Int64(values[0])!, forKey: "autID")
        valuesDict.updateValue(values[1], forKey: "autSName")
        valuesDict.updateValue(values[2], forKey: "autFName")
    }
}

解析工作正常,但字典内容值仅来自最后一个数据行,即使 updateValue 方法记录为“更新存储在字典中给定键的值,或者如果键不存在则添加新的键值对”。所以我假设它将所有唯一的键值组合添加到 valuesDict 字典中。我在这里做错了什么?

标签: swiftdictionary

解决方案


CSV 是一种数组格式,一行表示字段名称,后续行表示记录。

你必须声明一个数组

var valuesArray = [Dictionary<String,Any>]()
let dataRows = content.components(separatedBy: "\n")

for dataRow in dataRows {
    let values = dataRow.components(separatedBy: ";")
    if let autID = Int64(values[0]) {
        valuesArray.append(["autID": autID, "autSName": values[1], "autFName": values[2])
    }
}

进一步你可能会放弃第一行。这就是 Swift,自定义结构比原始字典更可取。


推荐阅读