我如何插入字符串的二维数组字符串
问题描述:
我有一个tableview,我想要从服务器加载多个部分,所以我需要一个二维数组。我如何插入字符串的二维数组字符串
我已经试过是这样的:
var sections = [String]()
var district = [[String]]()
if let objects = objects {
for object in objects {
let town = object["town"] as! String
if !self.sections.contains(town){
self.sections.append(town)
self.district[self.i].append(object["district"] as! String)
self.i += 1
}else{
let f = self.sections.indexOf(town)
self.district[f!].append(object["district"] as! String)
}
}
}
当我运行它,我得到这个消息:
指数超出范围
我试图插入我的元素与+ =,但它甚至不让我运行它。
我也试过这样:
self.district[0][0] = object["district"] as! String
而且我得到了同样的错误。
答
正如在评论中提到,随着指数self.i
数组元素并不数组self.district
中,当您尝试在
self.district[self.i].append(object["district"] as! String)
追加,你有一个新元素第一追加到self.district
存在。
您还应该删除所有强制转换as!
,这会导致 程序在失败时崩溃。然后,您的代码看起来是这样的:
var sections = [String]()
var districts = [[String]]()
if let objects = objects {
for object in objects {
if let town = object["town"] as? String,
let dist = object["district"] as? String {
if let idx = sections.indexOf(town) {
districts[idx].append(dist)
} else {
sections.append(town)
districts.append([dist])
}
}
}
}
或者(如在现在删除评论建议),存储 信息在单阵列自定义结构的:
struct SectionInfo {
let town: String
var districts: [String]
}
var sections = [SectionInfo]()
if let objects = objects {
for object in objects {
if let town = object["town"] as? String,
let dist = object["district"] as? String {
if let idx = sections.indexOf({ $0.town == town }) {
sections[idx].districts.append(dist)
} else {
sections.append(SectionInfo(town: town, districts: [dist]))
}
}
}
}
你迭代通过对象的对象',但你没有'对象'变量声明... – pbush25
我更新了我的问题@ pbush25 –
@ pbush25这不是错误的来源。 – Moritz