【问题标题】:Higher order function on a nested array嵌套数组上的高阶函数
【发布时间】:2021-06-19 19:41:02
【问题描述】:

所以我相信我在这里是正确的。假设我有一个数据类型:[[String:Double]]

我想添加所有的双打/价值品质。我该怎么办...

到目前为止我...

var slices: [NewestAttempt] {
        let data: [[String:Double]] = [["Bost" : 80], ["Craig" : 70], ["Dans" : 50]]
        let total = 0
        for array in arrays {
            data.reduce{ $0[total].reduce(0) {$0 + $1.value }}
        }
        
    }

【问题讨论】:

  • 所以你想要一个Double,它是所有Doubles 的总和?
  • 当前代码有什么问题? NewestAttempt 是什么?
  • 是的,首先,我需要一个元组数组——String 和 Double 对,但我想一旦我看到 .reduce 函数给我一个 Double 总数,我应该能够弄清楚如何做剩下的事情
  • @Cristik Contextual closure type '(Int, [String : Double]) throws -> Int' expects 2 arguments, but 1 was used in closure body 这让我很困惑,因为我使用的是 $0 和 $1
  • 另外,您的数据不是数组数组。它是一组单键字典!但这表明您应该改用结构。

标签: swift higher-order-functions


【解决方案1】:

你可以试试这个-

let data: [[String:Double]] = [["Bost" : 80], ["Craig" : 70], ["Dans" : 50]]
var total: Double = 0
for packet in data {
    for (key, value) in packet {
        total += value
    }
}

print(total)

更新

使用reduce

let data: [[String:Double]] = [["Bost" : 80], ["Craig" : 70], ["Dans" : 50]]
var total: Double = 0
for packet in data {
    total += packet.values.reduce(0, +)
}
print(total)

【讨论】:

  • 太棒了,我发现我错过了一个 for 循环。不过我很好奇,有没有在 data 上使用 .reduce 来获得相同的结果
  • 查看更新
  • 没有for 循环:data.reduce(0) { $1.reduce($0, +) }
  • 非常感谢.. !
  • 或者干脆data.flatMap(\.values).reduce(0,+)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-08-15
  • 1970-01-01
  • 1970-01-01
  • 2019-12-15
  • 1970-01-01
  • 2022-01-06
相关资源
最近更新 更多