【问题标题】:Using arrays of arrays in swift快速使用数组数组
【发布时间】:2018-10-31 20:17:59
【问题描述】:

对 Swift 来说还是很新我想使用一个整数数组。因此,我在使用它的函数中编写了以下内容。

var allSetsOfCards: [[Int]]

在应用程序开始运行之前,我不知道它到底有什么或有多大,除了其中的每个数组都包含三个整数,所以当我介绍它时我无法准确指定它的样子它。稍后我想通过以下方式向它添加一些信息:

allSetsOfCards[setNumber][0] = i
allSetsOfCards[setNumber][1] = j
allSetsOfCards[setNumber][2] = k

其中setNumberijk 是整数变量。这给了我错误信息:

变量“allSetsOfCards”在被引用之前通过引用传递 初始化。

我需要做什么?我搜索了这个网站,发现一个似乎涵盖了该主题的条目(Two-dimensional array in Swift)但我无法理解它。再多的谷歌搜索似乎也不起作用。我的具体问题的答案会很棒。一个简单易懂的关于 swift 如何处理数组的解释会很棒。

【问题讨论】:

标签: arrays swift integer


【解决方案1】:

错误信息很清楚。 你在这里所做的只是声明。要使用它,您需要将其与声明分开初始化:

var allSetsOfCards: [[Int]]
allSetsOfCards = [[Int]]()

或与之一起:

var allSetsOfCards = [[Int]]()

当编译器到达您的下标代码时,会出现下一个问题。由于数组一开始就很空,你会得到Index out of range 错误。您应该保留容量以便能够为您的索引下标,或者将您的元素附加到一个空数组。

allSetsOfCard.append([i, j, k])

【讨论】:

    【解决方案2】:

    虽然您的问题可能与 Variable p passed by reference before being initialized 重复,但我会尝试为您的案例发布描述性答案。


    到目前为止,您通过实施做了什么:

    var allSetsOfCards: [[Int]]
    

    只是声明一个没有initializing它的变量。所以你要做的就是在使用它之前对其进行初始化,你将有不止一个选择,你可以简单地这样做:

    var allSetsOfCards = [[Int]]()
    

    如果你很确定allSetsOfCards 会一直被使用,那就没问题了。

    有时您的应用程序不需要使用它,例如,假设您需要填写allSetsOfCards,如果仅应用了特定条件,那么初始化它将毫无意义(它是无用的内存浪费),此时您可以将其声明为 惰性属性

    lazy var allSetsOfCards = [[Int]]()
    

    假设allSetsOfCards 是一个结构体或一个类的属性,此时它不会被初始化,除非你需要使用它。


    旁注:

    另外,你必须确保内部数组也已经初始化,例如:

    var allSetsOfCards = [[Int]]()
    
    // that's what I mean:
    var firstSet = [Int]()
    
    allSetsOfCards.append(firstSet)
    
    // assuming that `setNumber` is 0 so far...
    var setNumber = 0
    
    allSetsOfCards[setNumber].append(i)
    allSetsOfCards[setNumber].append(j)
    allSetsOfCards[setNumber].append(k)
    
    // OR (as shorter option):
    allSetsOfCards[setNumber].append([i, j, k])
    

    你知道 Swift Sets吗?您可能希望让 allSetsOfCards 成为一个集合数组 ([Set<Int>]()) ?。

    【讨论】:

      【解决方案3】:

      试试这个...

      你可以像这样初始化数组数组

      var intArrayOfArray: [[Int]] = [[Int]]()

      下面的行会抛出一个错误,因为此时数组只是初始化并且不包含任何元素,因此数组索引超出范围错误。

       //print(intArrayOfArray[0]) //output:: error indexOutOfBound
      
      intArrayOfArray.append([1,2,3]) 
      
      print(intArrayOfArray[0]) // output:: [1,2,3]
      
      intArrayOfArray.append([4,5])
      
      print(intArrayOfArray[1]) // [4,5]
      
      intArrayOfArray[0] = [6, 7]
      
      print(intArrayOfArray[0]) // [6, 7]
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2014-09-11
        • 1970-01-01
        • 1970-01-01
        • 2014-12-10
        • 2015-10-27
        • 1970-01-01
        相关资源
        最近更新 更多