swift - 如何动态填写字典
问题描述
我解析加载到内容中的 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 字典中。我在这里做错了什么?
解决方案
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,自定义结构比原始字典更可取。
推荐阅读
- reactjs - 如何在我的反应应用程序中测试 localStorage?
- progressive-web-apps - 通过 https 在虚拟主机上的 android 上测试渐进式 Web 应用程序
- python - Pandas:计算满足条件的列之间的时间
- sas - 如何处理可能不存在的输入文件 (*.txt)
- mysql - 从mysql数据库表中删除重复行的查询
- laravel-5 - 在检索到的事件中访问 $hidden 属性
- mysql - MySQL:在子查询中对 Select * vs select 有任何性能影响吗?
- wordpress - 联系表格 7 不会解析日期?
- java - 使用 Spring 将数据从 Thymeleaf 传递到控制器
- java - 如何在控制台上打印“AB\nCD”而不换行?