2016-09-18 4 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! 

아래 코드는 각각의 개별 값을 두 배로하여 내가 찾고있는 코드가 아닙니다.

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을 적용 할 수 있습니다 : 당신은 미개봉 값에 map+ 등의 작품을 통해 flatMap를 사용해야합니다

.

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

Swift 3에서'combine :'를 원하지 않을 것입니다. 또한'?? "!"대신에 ""을 사용하여 높이 문자열을 안전하게 언랩합니다 – vacawama