我一直在尝试创建一个社交应用程序,以允许人们给他人评分。我已经能够检索并显示每个评论的评分,但是我一直难以获得所有评分来计算平均值。
这是我的代码:
data.insert(0, 'rundate', inpdate)
我的firebase数据库结构如下所示:
data = data[data.columns[-1:].tolist()+data.columns[:-1].tolist()]
我想使用子节点“ STAR”进行计算
请,我们将不胜感激!
答案 0 :(得分:0)
这是问题所在;该结构可能太深,您的代码与该结构不匹配。
您正在观察具有两个子节点的Review节点
Review
-75YFH...
-MAc9ou...
请记住,那些子节点也有子节点。
-7590W...
-LM90W...
-LM90o...
-MAc9ou...
-LM90a
for循环遍历-75YFH和-MAc9ou的顶级子节点,因此此代码
let placeSnap = child as! DataSnapshot
let ratingsSnap = placeSnap.childSnapshot(forPath: "STAR")
是真的
let ratingsSnap = -75YFH.childSnapshot(forPath: "STAR")
和
let ratingsSnap = -MAc9ou.childSnapshot(forPath: "STAR")
并且您会看到STAR不是这些节点的子代。
根据您的结构,-75YFH和-MAc9ou的两个顶部节点中的每个节点都需要另一个循环,以迭代其子节点并检索STAR节点
var counter = 0
placesRef.observeSingleEvent(of: .value, with: { snapshot in
for child in snapshot.children { //this is -75YFH and -MAc9ou
let placeSnap = child as! DataSnapshot
for childOfPlace in placeSnap.children { //this is -LM90W and -LM90o
let childOfPlaceSnap = childOfPlace as! DataSnapshot
//let ratingsSnap = childOfPlaceSnap.childSnapshot(forPath: "STAR")
//I prefer the following...
let dict = childOfPlaceSnap.value as! [String: Any]
let val = dict["STAR"] as! Int
counter += val
}
}
print("total stars: \(counter)") //or tableView.reloadData()
})
注意:在我的iPad上键入该代码,因此未经测试,因此请勿复制粘贴。这个概念是合理的。