Ich habe diese Erweiterung auf SequenceType
geschrieben, um Python's collections.Counter
nachzuahmen.Warum ist dieser Code nicht eindeutig?
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]
Hier ist der Code:
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
}
}
}
ich die folgende Fehlermeldung erhalten:
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
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Interessant. Haben Sie eine Idee, warum diese Einschränkung existiert? Und hah bitte entschuldigen Sie die Fehler, die Sie im zweiten Teil adressieren, der Compiler nicht bekommen, diese noch zu überprüfen xD – Alexander
@AlexanderMomchliov: Leider kenne ich den Grund nicht. –
Kennen Sie übrigens eine Möglichkeit, eine Kopie eines Wörterbuchs zurückzugeben, das ein neues Mapping in einem Ausdruck enthält? Das Wörterbuch entspricht 'Return-Array + [NewItem]' – Alexander