Ich habe eine lange Zeichenfolge (manchmal über 1000 Zeichen), die ich in ein Array von booleschen Werten konvertieren möchte. Und das muss es viele Male sehr schnell tun.Was ist ein schneller Weg, um eine Zeichenfolge von zwei Zeichen in ein Array von Booleans zu konvertieren?
let input: String = "001"
let output: [Bool] = [false, false, true]
Mein naiver Versuch war:
input.characters.map { $0 == "1" }
Das ist aber viel langsamer als Ich mag würde. Mein Profiling hat mir gezeigt, dass die map
wo die Verlangsamung ist, aber ich bin mir nicht sicher, wie viel einfacher ich das machen kann.
Ich fühle mich wie dies schnell ohne Swift/ObjC Overhead wäre. In C denke ich, das ist eine einfache for
Schleife, wo ein Byte des Speichers mit einer Konstante verglichen wird, aber ich bin mir nicht sicher, was die Funktionen oder die Syntax ist, die ich betrachten sollte.
Gibt es eine Möglichkeit, dies viel schneller zu tun?
UPDATE:
Ich habe auch versucht eine
output = []
for char in input.characters {
output.append(char == "1")
}
Und es geht um 15% schneller. Ich hoffe auf viel mehr als das.
überprüfen Sie mit rohen für .. in – dimpiax
@dimpiax Wie so genau? Ich habe die Frage mit einem Versuch einer manuellen 'for'-Schleife bearbeitet, und es hilft ein wenig. –
Sample Größe von "001" ist ein bisschen klein für tatsächlich messbare Unterschiede. Können Sie ein größeres Probenset zur Verfügung stellen? Sie könnten auch keinen Unterschied in der Zeit messen, die benötigt wird, um 3 Zeichen zu durchlaufen. (Debugger angeschlossen? Ungültige Ergebnisse!) –