반응형
codewars 를 풀다가 한줄짜리 카운터 구현이 있어서 옮겨본다. 한눈에 이해가 안 되서 옮겨보는 것임.
카운터라고 하면, 일련의 시퀀스 (리스트, 어레이로 주어진) 가 주어지고, 각각의 갯수를 세는 것을 말한다. python 에는 collections 에 Counter 라는 클래스를 간단히 이용하면 된다.
코드는 다음과 같다.
func counter(_ seq: [Int]) -> [Int:Int] {
return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +)
}
// ViacheslavTronewsky@codewars
딕셔너리는 두개짜리 튜플의 시퀀스를 받아서, 딕셔너리로 바꿔주는데, 중복되는 키가 있을 때 어떻게 처리할지를 결정하는 인자가 uniquingKeysWith 라는 인자. 중복되는 게 발견되면, 그 value 끼리 더하라고 했기 때문에 각 원소에 대한 카운트를 담는 카운터 딕셔너리가 만들어진다.
func counter(_ seq: [Int]) -> [Int:Int] {
return Dictionary( seq.map { ($0, 1) }, uniquingKeysWith: +)
}
let cnt = counter([1,2,3,2,1,1,1,10,111])
print(cnt)
for (n, count) in cnt {
print("\(n) - \(count)개")
}
// 실행결과
//
// [2: 2, 111: 1, 3: 1, 1: 4, 10: 1]
// 2 - 2개
// 111 - 1개
// 3 - 1개
// 1 - 4개
// 10 - 1개
728x90
'프로그래밍 > SWIFT' 카테고리의 다른 글
100DaysOfSwiftUI - Day 16 (0) | 2022.07.01 |
---|---|
[Swift] error: ambiguous use of 'split(separator:maxSplits:omittingEmptySubsequences:)' (0) | 2022.06.22 |
[Swift] 소인수분해 (0) | 2022.06.20 |
[Swift] swift 단일 스크립트 파일을 컴파일하기 (0) | 2022.06.16 |
Swift 북마크 (0) | 2022.06.08 |