2016-09-18 5 views
2

Dies ist nur ein paar ähnliche Beispielcode unten. Ich versuche, die Höhen aller Menschen zu erfassen und addiere sie zusammen, so dass ich einen Durchschnitt bekommen kann. Ich kann nicht herausfinden, wie man das mit einer Reihe von Wörterbüchern macht. Auch verwende ich Xcode 3.Summe der Werte in einem Wörterbuch - Swift

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" 
    ], 
] 

Der folgende Code scheint nur neue leere Arrays zu erstellen.

var zero = 0.0 
var peopleHeights = Double(player["height"]!) 
var totalHeights = zero += peopleHeights! 

Der untenstehende Code verdoppelt jeden einzelnen Wert, also nicht das, was ich suche.

Im folgenden Code bekomme ich die Antwort: Wert des Typs Double hat kein Mitglied zu reduzieren.

var peopleHeights = Double(player["height"]!) 
var totalHeights = peopleHeights.reduce(0.0,combine: +) 

Jede Hilfe wäre willkommen.

+0

'player' ist ein Array, was erwartest du' player ["height"] zu tun? – njzk2

Antwort

1

Sie könnten auch einfach über das Array von Wörterbüchern iterieren.

var totalHeight: Double = Double() 

for person in people 
{ 
    totalHeight += Double(person["height"]!)! 
} 
6

Sie müssen die Höhe jeder Person mit map extrahieren. Dann können Sie reduce auf der Liste gelten die Höhen enthalten:

Sie flatMap über map als + Werke nur auf unverhüllten Werte verwenden soll.

people.flatMap({ Double($0["height"]!) }).reduce(0, +) 
+2

Sie möchten nicht das 'combine:' in Swift 3. Außerdem sollten Sie '?? "" anstelle von '!', um die Höhenkette sicher auszupacken – vacawama

Verwandte Themen