Arrays 如何以相同的顺序接收阵列数据

Arrays 如何以相同的顺序接收阵列数据,arrays,swift,firebase,Arrays,Swift,Firebase,我的应用程序要求用户每天给1-6个值打分。 我为每个用户将其存储在一个文档中, 我想创建一个简单的图表视图和显示图表,在x轴上显示用户费率 我的问题是: 当我从文档中获取值时,每次打开应用程序,它都会以随机方式返回值 在我下面附上的照片中,你可以看到它返回的代码和数组 代码 结果 在您的示例中,可以在读取数据数组之前在数据数组中使用sort。 例如: data.sort 苹果公司的样品: var students = ["Kofi", "Abena", "Peter", "Kweku", "Ak

我的应用程序要求用户每天给1-6个值打分。 我为每个用户将其存储在一个文档中, 我想创建一个简单的图表视图和显示图表,在x轴上显示用户费率

我的问题是:

当我从文档中获取值时,每次打开应用程序,它都会以随机方式返回值

在我下面附上的照片中,你可以看到它返回的代码和数组

代码

结果


在您的示例中,可以在读取数据数组之前在数据数组中使用sort。 例如:

data.sort

苹果公司的样品:

var students = ["Kofi", "Abena", "Peter", "Kweku", "Akosua"]
students.sort()
print(students)
// Prints "["Abena", "Akosua", "Kofi", "Kweku", "Peter"]"

资料来源:

一般来说,Firebase/Firestore非常依赖键:值对,就像在字典中找到的那样

字典是无序的。。。那么这个

document?.data()
包含您的数据,但它不是按顺序排列的,并且会因读取而有所不同

保证顺序的一个选项是将值存储在数组中

我不知道你的Firestore结构是什么,但假设我们有一个包含数组的多个字段的文档

arrays // collection
   array_doc_0 //document
      array_0    /field
         0: 1
         1: 2
         2: 3
      array_1
         0: 4
         1: 5
         2: 6
要在中读取这些内容并将其打印到控制台,下面是代码。请注意,数组的内容将始终以正确的顺序排列,由其数组索引保证

func readSomeArrays() {
    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]
            for i in array {
                print(i)
            }
        }
    })
}
以及输出

[4, 5, 6]
[1, 2, 3]

请注意,数组_1在数组_0之前打印。这也是因为documentSnapshot.data是一个无序的“字典”,我们正在对其进行迭代。不清楚排序是否重要,但如果重要,请将数组存储在数组中,或者创建自己的索引并在代码中排序。

首先欢迎使用Stackoverflow。请不要张贴图片。张贴文本。请求的结果似乎是一本词典。字典是无序的。您需要应用谓词来返回排序的内容或按需要的顺序对值进行排序。首先,您的数据是如何保存的?它看起来像是另存为字典,未排序。保存时是否可以使用已排序的类型?e、 数组,元组。。。?否则,可以在加载后使用.sorted方法对字典进行排序,该方法返回一个元组。你可以查看这篇文章,了解更多的工作原理:把你的代码作为代码,而不是图像。在Xcode中高亮显示您的代码,在Xcode中高亮显示command+c,在StackOverflow编辑器中高亮显示command+v,高亮显示代码,然后按command+k将其格式化为代码。如果他们不希望对代码进行排序,他们希望按照存储在Firebase中的顺序读取代码,该怎么办?在这种情况下,您必须重新考虑应用程序的体系结构,因为正如@vadian在评论中提到的:请求的结果似乎是一个字典。字典是无序的。您需要应用谓词来返回排序的内容或按需要的顺序对值进行排序。您如何知道数据是如何存储的?如果它已经存储在一个有序的数组中呢?我的观点是,OP显然希望按照它存储的序列检索数据,而不是按排序的序列检索数据。如果周一评级为3,周二评级为2,周三评级为5,然后这些评级按照您的答案进行排序,它们将不再与正确的日期对应。哦,明白了。是的,这很有道理。