2016-07-26 119 views
2

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

回答

1

正如在評論中提到,隨着指數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])) 
      } 
     } 
    } 
}