所以这只是下面的一些类似示例代码。我试图把所有人的高度都加在一起,这样我就能得到一个平均值。我似乎无法弄清楚如何使用一系列字典来完成这项工作。我也在使用Xcode 3。
let people = [
[
"name": "John Doe",
"sex": "Male",
"height": "183.0"
],
[
"name": "Jane Doe",
"sex": "Female",
"height": "162.0"
],
[
"name": "Joe Doe",
"sex": "Male",
"height": "179.0"
],
[
"name": "Jill Doe",
"sex": "Female",
"height": "167.0"
],
]
以下代码似乎只是创建了新的空数组。
var zero = 0.0
var peopleHeights = Double(player["height"]!)
var totalHeights = zero += peopleHeights!
以下代码将每个单独的值加倍,而不是我想要的。
var zero = 0.0
var peopleHeights = Double(player["height"]!)
var totalHeights = peopleHeights.map {$0 + $0}
在下面的代码中,我得到了响应:Double类型的值没有成员reduce。
var peopleHeights = Double(player["height"]!)
var totalHeights = peopleHeights.reduce(0.0,combine: +)
任何帮助都将不胜感激。
答案 0 :(得分:7)
您需要使用map
提取每个人的身高。然后,您可以在包含高度的列表中应用reduce
:
您应该使用flatMap
而不是map
因为+
仅适用于未展开的值。
people.flatMap({ Double($0["height"]!) }).reduce(0, +)
答案 1 :(得分:3)
你也可以简单地遍历你的字典数组。
var totalHeight: Double = Double()
for person in people
{
totalHeight += Double(person["height"]!)!
}
答案 2 :(得分:0)
flatMap
可以很好地用于值的总和,因为它只考虑非nil值。
let totalHeights = people.flatmap{ $0["height"] as? Double}.reduce(0, +)