将2d阵列存储在Firestore中?

时间:2019-07-31 17:37:36

标签: arrays swift firebase google-cloud-firestore

在Firestore中保存/返回二维数组的最佳实践是什么?而不是为每个数组创建一个新的集合,而是将数据结构保持在一起更有效吗?谢谢!

custom_ptr<HANDLE, &CloseHandle> phandle{
    CreateFileMapping( INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, 1024, L"FileName" ) };

1 个答案:

答案 0 :(得分:1)

结构应该相当简单

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)
    }
})

最终结果将是一个对象,该对象的var是一个数组数组。闭包的最后一部分遍历我们创建的对象,以验证它的值是数组数组。输出是

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