Arrays 在Firestore中存储2d阵列?

Arrays 在Firestore中存储2d阵列?,arrays,swift,firebase,google-cloud-firestore,Arrays,Swift,Firebase,Google Cloud Firestore,在Firestore中保存/返回2d数组的最佳做法是什么?与为每个数组创建新集合不同,是否有更有效的方法将数据结构保持在一起?谢谢 struct appleCounter { var tree = [branches] } var branches = [Int]() let treeFullOfApples = [[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]] let morningC

在Firestore中保存/返回2d数组的最佳做法是什么?与为每个数组创建新集合不同,是否有更有效的方法将数据结构保持在一起?谢谢

struct appleCounter {
    var tree = [branches]
}

var branches = [Int]()

let treeFullOfApples = [[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]

let morningCount = appleCounter{
    tree: treeFullOfApples
}

结构应该相当简单

arrays //collection
   array_doc_0 //document
      array_0     //field
         0: 10
         1: 10
         2: 10
      array_1
         0: 10
         1: 10
         2: 10
然后是一个类来保存数组的数组

class MyArrayClass {
    var myArrayOfArrays = [ [Int] ]()
}
在上面,myArrayOfArrays是一个包含多个Int数组的变量,如问题所示

[[10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10], [10, 10, 10, 10]]
然后是从Firestore读取该结构并填充MyArrayClass对象的代码

var myNestedArray = MyArrayClass()

let arraysCollection = self.db.collection("arrays")
let thisArrayDoc = arraysCollection.document("array_doc_0")
thisArrayDoc.getDocument(completion: { documentSnapshot, error in
    if let err = error {
        print(err.localizedDescription)
        return
    }

    guard let doc = documentSnapshot?.data() else { return }

    for arrayField in doc {
        let array = arrayField.value as! [Int]
        myNestedArray.myArrayOfArrays.append(array)
    }

    for a in myNestedArray.myArrayOfArrays { //output the arrays
        print(a)
    }
})
最终结果将是一个对象,该对象具有一个变量,该变量是数组的数组。闭包的最后一部分迭代我们创建的对象,以验证它的值是数组的数组。输出是

[10, 10, 10]
[20, 20, 20]

试一试,这个问题有点不清楚,如果你能解释“一起”是什么意思,我们也许可以提供一个解决方案。此外,您不需要为每个数组甚至单独的文档创建单独的集合;它们可以存储在一个数据库中,但同样,您的查询用例将决定什么最有效。@Jay感谢您的回复。我希望能够存储和更新从appleCounter结构构建的对象,但是我在如何将此嵌套数组与Firestore一起使用时遇到困难。感谢您的帮助!我在使用“arrayField.value as![Int]”时遇到问题。有什么简单的调整吗?谢谢@当然,这是一个很容易的调整,但我们需要知道我们在适应什么。换句话说,我的答案中的代码与我的答案中的Firestore结构100%兼容,因为所有子值都是Int。如果您的子值是其他值,例如字符串,那么您可以将它们作为字符串数组而不是Int来读取。