2017-12-05 11 views
0

의 DICT 키 또는 갱신 카운트를 만드는이 작업을 수행 할 수있는 간단한 방법이 있어야 것 같습니다 :한 줄 : 빠른

for each token 
    look it up in a dictionary 
    if it's there already, increment the value by 1 
    else create it and set value to 1 

나는

for token in tokens { 
    if let count = myDict[token] { 
     myDict[token] = count + 1 
    } else { 
     myDict[token] = 1 
} 

하여이 작업을 수행 할 수 있습니다하지만 것 같아 이 일을 더 우아하고 단선 적으로 처리해야합니까? , 더 나은 아직 사용 무기 호 유착

for token in tokens { 
    myDict[token] = myDict[token] ? myDict[token]! + 1 : 1 
} 

:

+0

FYI -'+ ='를'+'로 변경하십시오. – rmaddy

+0

이 수정되었습니다. thanks rmaddy –

답변

2

당신은 삼항 연산자를 사용할 수 있습니다

for token in tokens { 
    myDict[token] = (myDict[token] ?? 0) + 1 
} 

을 그리고 한 줄에 모든 것을 넣어 :

tokens.forEach { myDict[$0] = (myDict[$0] ?? 0) + 1 } 

그리고 스위프트 4 (Hamish에게 감사)와 함께, 조금 짧아 질 수 있습니다 :

tokens.forEach { myDict[$0, default: 0] += 1 } 
+2

스위프트 4에서는'myDict [token, default : 0] + = 1'라고 말할 수 있습니다. – Hamish

0
tokens.map{ myDict[$0] = (myDict[$0] ?? 0) + 1 } 
+0

'map'은'map'이 (이 경우) 새로운 배열을 반환하기 때문에 좋은 선택이 아니지만 그 결과는 필요하지 않습니다. – rmaddy