我如何插入字符串的二维数组字符串

问题描述:

我有一个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 

而且我得到了同样的错误。

+1

你迭代通过对象的对象',但你没有'对象'变量声明... – pbush25

+0

我更新了我的问题@ pbush25 –

+0

@ pbush25这不是错误的来源。 – Moritz

正如在评论中提到,随着指数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])) 
      } 
     } 
    } 
}