字典中的值之和 - Swift

时间:2016-09-18 00:44:53

标签: arrays swift dictionary swift3

所以这只是下面的一些类似示例代码。我试图把所有人的高度都加在一起,这样我就能得到一个平均值。我似乎无法弄清楚如何使用一系列字典来完成这项工作。我也在使用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: +)

任何帮助都将不胜感激。

3 个答案:

答案 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, +)