2016-09-18 15 views
2

これは、以下のようないくつかの似たようなコード例です。私はすべての人の高さをとり、一緒に追加して平均を得ることを試みています。私は辞書の配列でこれを行う方法を把握していないようです。また、Xcode 3を使用しています。辞書の値の合計 - 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" 
    ], 
] 

以下のコードは、新しい空の配列を作成するようです。

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

以下のコードは、私が探しているものではなく個々の値を2倍にしています。

var zero = 0.0 
var peopleHeights = Double(player["height"]!) 
var totalHeights = peopleHeights.map {$0 + $0} 

以下のコードでは、応答が返されます。Double型の値にはメンバーは削減されません。

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

助けてください。

+0

'player'は配列です、' player ["height"] 'は何をすると思いますか? – njzk2

答えて

1

あなたは、単に辞書のあなたの配列を反復処理することができます。

var totalHeight: Double = Double() 

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

mapを使用して各人の身長を抽出する必要があります。その後、高さを含むリストにreduceを適用することができます。

あなただけ開封された値にflatMap+としてmap以上の作品を使用する必要があります。

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

あなたはSwift 3で 'combine:'をしたくありません。また、 '?? "!"の代わりに ""を使用して、高さ文字列を安全にアンラップします – vacawama

関連する問題