【问题标题】:How to insert values into a multidimensional array in a loop swift [closed]如何在循环中快速将值插入多维数组[关闭]
【发布时间】:2016-06-12 15:41:47
【问题描述】:

找不到答案。

我正在尝试使用类似这样的方式将值插入到多维数组中

_ = 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),在 Playground 中玩耍后,我意识到这是因为我的monthList: [[String]] = [[]],因此没有任何数组可以插入或类似的东西。如果我要给它一些像monthList = [["1"], ["2"]] 这样的初始化,那么我将能够插入到monthList[1],然后它会为monthList[2] 提供错误

帮助?谢谢

【问题讨论】:

标签: ios arrays swift


【解决方案1】:

当你声明你的数组数组时,你的外部数组是空的。为了向多维数组中插入值,您需要创建内部数组并将它们添加到外部数组中。

您可以通过添加一个 while 循环来完成此操作,该循环会添加更多内部数组,直到您有足够的插入内容:

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

如果您提前知道 counter 是来自 0...29 的值,您可以像这样创建内部数组:

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

【讨论】:

  • 非常感谢!
【解决方案2】:

在尝试添加到该数组之前,您可能需要初始化第二维中的每个数组,我不知道您是否真的这样做,因为提供的代码 sn-p 非常小。另外我相信 swift 中的数组是可变的,所以你可以这样做:

monthList[counter] = [String]()

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

通过这种方式,您可以使用 append 将元素动态插入到数组中。否则,您将需要另一个计数器变量来为您的插入方法的 atIndex 参数递增,因为在您的代码中,插入方法中的 atIndex 始终在索引 0 处插入。

【讨论】:

  • 感谢您的回答!说得通。但执行应该像 vacawama
  • @Chris 是的,vacuwama 的答案比我的更好,所以不用担心。我不太了解 swift 或它的语法,我只是注意到在没有先初始化该数组的情况下尝试在第二维数组中添加元素可能出现的逻辑错误,这是在大多数编程语言中都会发生的错误。 vacuwama 的答案是一个更好的答案,可以让其他人看到:)
猜你喜欢
  • 1970-01-01
  • 2017-02-15
  • 2020-06-16
  • 2019-07-25
  • 1970-01-01
  • 2017-12-17
  • 1970-01-01
  • 1970-01-01
  • 2019-11-18
相关资源
最近更新 更多