2016-06-12 69 views
0

想不出一個多維數組找到這個問題的答案。如何插入值到在一個循環中迅速

我試圖將值插入一多維數組,像這樣

_ = transportRef.observeEventType(.ChildAdded, withBlock: { (snapshotOne) in 

     self.yearList.insert(snapshotOne.key, atIndex: 0) 

     //print("snapshotone.key " + snapshotOne.key) // prints year 

     if let snapshotTwo = snapshotOne.children.allObjects as? [FIRDataSnapshot] { 

      for itemTwo in snapshotTwo { 

       self.monthList[self.counter].insert(itemTwo.key, atIndex: 0) 
      } 
     } 

     counter += 1 
} 

counter是在這一個之外的另一個循環。事情是我收到一個錯誤Thread 1: EXC_BAD_INSTRUCTION (code=EXC_1386_INVOP, subcode=0x0),並在遊樂場玩耍後,我意識到這是因爲我的monthList: [[String]] = [[]],因此沒有任何數組插入或類似的東西。如果我要給它一些初始化像monthList = [["1"], ["2"]]然後我可以插入,直到monthList[1]之前,它給出了一個錯誤monthList[2]

幫助嗎?感謝

+0

顯示您的代碼並提供錯誤的詳細信息。 – matt

+0

參見:[多維數組在斯威夫特(http://stackoverflow.com/q/24051490/1445366) –

+0

我增加了更多的細節@馬特 – Chris

回答

2

當您聲明數組數組時,外部數組是空。爲了將值插入到多維數組中,您需要創建內部數組並將它們添加到外部數組中。

你可以通過添加while循環,增加了更多的內部陣列,直到你有足夠的插入做到這一點:

for item in itemsOne { 
    while counter >= monthList.count { 
     monthList.append([String]()) 
    } 
    monthList[counter].insert(item.key, atIndex: 0) 
} 

如果你提前知道時間counter0...29例如一個值,你可以像這樣創建內部陣列:

var monthList = [[String]](count:30, repeatedValue:[]) 
+0

非常感謝你! – Chris

0

您可能需要嘗試添加到該數組,我不知道你實際上這樣做或沒有,因爲所提供的代碼片段是非常小的前初始化每個數組中的第二個維度。我也相信,在迅速數組是可變的,所以你可能只是這樣做:

monthList[counter] = [String]() 

for item in itemsOne { 
    monthList[counter].append(item.key) 
} 

這樣通過追加可以動態插入元素到您的陣列。否則,您需要另一個計數器變量來爲您的插入方法的atIndex參數遞增,因爲在您的代碼中,插入方法中的atIndex始終插入索引0處。

+0

謝謝您的回答!說得通。但執行應該像vacawama – Chris

+0

@Chris是的,veswama答案比我的更好的解決方案,所以沒有後顧之憂。我不太瞭解Swift或它的語法,我只是注意到嘗試在第二維數組中添加元素而沒有首先初始化該數組時可能出現的邏輯錯誤,這是大多數編程語言中會發生的錯誤。真空答案是一個更好的答案被接受爲他人看到:) – JustSomeDude