1
이 확장을 SequenceType
에 작성하여 Python's collections.Counter
과 유사하게했습니다.이 코드가 모호한 이유는 무엇입니까?
extension SequenceType where Self.Generator.Element : Hashable {
func countRepetitions() -> [Self.Generator.Element : Int] {
return self.reduce([Self.Generator.Element : Int]()) { dict, element in
dict[key: element] = (dict[element] ?? 0) + 1
}
}
}
나는 다음과 같은 오류가 발생합니다 : :
let input = [
"a", "a", "a", "a", "a",
"b", "b", "b", "b",
"c", "c", "c",
"d", "d",
"e"
]
let counts = input.countRepetitions()
print(counts) //expected result: ["a": 5 , "b" : 4, "c" : 3, "d" : 2, "e" : 1]
여기에 코드입니다
중첩 유형의 변수를 정의 할 때 제한 될 것으로 보인다Playground execution failed: OS X.playground:26:22: error: type of expression is ambiguous without more context
return self.reduce([Self.Generator.Element : Int]()) { dict, element in
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
흥미 롭습니다. 그 제한이 존재하는 이유를 알고 있습니까? 그리고 두 번째 부분에서 언급 한 오류를 용서해주십시오. 컴파일러가 아직 xD를 검사하지 않았습니다. – Alexander
@AlexanderMomchliov : 불행히도 이유를 모르겠습니다. –
그건 그렇고, 새로운 매핑을 포함하는 사전 사본을 모두 한 표현으로 반환하는 방법을 알고 있습니까? 'return array + [newItem]'에 해당하는 사전 – Alexander