gpt4 book ai didi

arrays - 将 firebase 中多个字典中的值添加到 Int 中

转载 作者:行者123 更新时间:2023-11-30 10:47:31 26 4
gpt4 key购买 nike

我使用 Firebase 来存储应用中每个视频的观看次数。我想要的是收集一个用户所有视频的所有观看次数并显示观看总数。但是,我在获取数据并将所有字典值放入 Int/String 中时遇到问题!

到目前为止,我已经尝试了许多不同的解决方案,但我仍然得到了字典中的数组/值等所有不同的值,而不是添加到一个值中的所有值

这是我用于获取特定用户的所有视频 View 的代码,到目前为止没有问题。当我打印“intConvert”时,我得到了不同行中的所有 View 。

<小时/>
      let ref = Database.database().reference().child("videoviews").child(stringUid)
ref.observe(.value, with: { (snapshot) in
if let dictionary = snapshot.value as? [String: AnyObject]{

let numbOfViews = dictionary["views"] as! String
let intConvert = Int(numbOfViews)!
let ArrayViews = [intConvert]
<小时/>

这是我的数据库结构:

   **videoviews**
-Lb52VxrEqdSRGljJdP7
views: "25"

-Lb53ARq_lOHEbTruW8s
views: "273"

-Lb53A_cEyX3CYc4mKYn
views: "38"
<小时/>

编辑:如果我执行 print(dictionary),则“if letdictionary = snapshot.value as? [String: Anyobject] 中的字典如下所示:

      ["views": 642]
["views": 660]
["views": 628]
["views": 630]
["views": 615]
["views": 3]
["views": 0]
["views": 2]
["views": 1]
<小时/>

编辑:(我很困惑,忘记添加手镯,对此感到抱歉。)当我这样做时,我“打印(dictionary.values)控制台看起来像这样(来自不同字典的键值):

  [642]
[660]
[628]
[630]
[615]
[3]
[0]
[2]
[1]

然后我尝试将其放在一个循环中,如下所示:

<小时/>
       var bLoader = 0.0
for hejArray in 0...ArreyViews.count-1{
bLoader += Double(Arrej[hejArray])
}
<小时/>

但是当我打印“bLoader”时,我仍然获得不同行中每个视频的所有观看次数,而不是聚集在一个值中。

那么我需要做什么才能将 Firebase 中不同字典中的所有值组合到一个变量中?

我很感激我能得到的所有帮助,我可以想象这应该不会太难,但我错过了一些东西。

编辑///我终于找到了问题所在。我传入的“StringUid”具有不同数量的值,因此如果用户的视频数量为 9,则整个函数将被调用 9 次。最终有效的解决方案如下所示:

全局数组声明:

              var myArray = [String]()

函数内部:

       if let dictionary = snapshot.value as? [String: AnyObject]{
let numbOfViews = dictionary["views"] as! String
let intConvert = Int(numbOfViews)!
self.myArray.append(numbOfViews)
let intArray = self.myArray.map { Int($0)!}
let total = intArray.reduce(0, +)
self.totalViewsShower2.text = String(total)

提前谢谢您!

最佳答案

更新

如果您可以像这样直接打印字典中的值,那么解决方案可能就像这样简单

let total = dictionary.values.reduce(0, +)

或者如果值是字符串,您需要将它们转换为 Int

let total = dictionary.values.reduce(0) {sum, value -> Int in return sum + (Int(value) ?? 0)}

如果另一方面它们的值是字符串但定义为 Any 你需要额外的转换

let total2 = dictionary2.values.reduce(0) {sum, value -> Int in
if let str = value as? String {
return sum + (Int(str) ?? 0)
}
return 0
}

我不太确定你的字典包含什么,但我假设是这样的

let dictionary: [String: Any] = ["views": ["1", "2", "3"]]

然后,您可以将“views”键的值转换为字符串数组,然后在该数组上使用 reduce 来获取总和

let array = dictionary["views"] as! [String]
let total = array.reduce(0) {sum, value -> Int in return sum + (Int(value) ?? 0)}

关于arrays - 将 firebase 中多个字典中的值添加到 Int 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55460831/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com