我正在尝试按日期对数据进行排序,但它无法正常工作。 这是我想要排序的数据:
{
"events": {
"Saturday, May 6, 2016" : [ null, {
"Id" : 3,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 4,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ],
"Saturday, April 8, 2016" : [ null, {
"Id" : 1,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 2,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ]
}
}
我希望按日期排序,但问题是日期是项目列表的关键。 我怎么能这样做?
我试过这个但是没有用:
ref.child("events").queryOrderedByKey().observeSingleEvent(of: .value, with: { (snapshot) in
let results = snapshot.value as! [String: Any]
for (eventDate, arr) in results {
let eventsDate = EventsDate()
eventsDate.eventsDate = eventDate
print(eventDate)
}
})
由于
答案 0 :(得分:4)
您的数据 按键(日期)排序,但问题是您的密钥是字符串,字符串按字母顺序排序。因此,您将首先获得所有 F 周五,然后 M ,等等。
要按时间顺序排序 ,您需要使用表示日期为升序数字的格式,即时间戳。 Firebase有一个非常好的快捷方式,可以在将timestamps写入数据库时以标准格式自动填充arrays,但不幸的是,只有当您需要创建数据的时间时才适用3}} EM>。但是,为任意日期和时间生成时间戳并不困难,而且有很多库可以在UI中来回转换为您喜欢的任何人类可读格式。如果您 仅对日期感兴趣,您可以使用ISO-8601之类的简单可排序格式:
{
"events": {
"2016-05-06" : [ null, {
"Id" : 3,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 4,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ],
"2016-04-08" : [ null, {
"Id" : 1,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
}, {
"Id" : 2,
"LogoImage" : "image_url",
"MainImage" : "image_url",
"Name" : "event_name"
} ]
}
}
您在数据中使用{{3}}时所做的事情也非常不明智,但对于另一个话题则是如此。
答案 1 :(得分:0)
Firebase有自己的密钥(它为您生成的UID),并默认使用orderedBy_查询对其进行优先级排序。这些默认密钥按添加的时间/日期划分优先级。
你(可能)想要的是“孩子”订购,这本质上是你自己的钥匙。请尝试以下方法:
ref.queryOrdered(byChild: "Id")
或您喜欢的其他任何子键。