2016-06-12 70 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