Appending String viel schneller als das Anhängen von Zeichen

Ich habe getanhttps: //www.hackerrank.com/challenges/30-review-loo Problem auf Hacker-Rang und ich stieß auf ein Timeout-Problem, das in etwa gelöst wurde. Ich hatte gehofft, dass mir hier jemand erklären kann, warum einer schneller ist als der andere. Oder verweisen Sie mich auf Dokumentation, die dieses Phänomen erklärt

Wenn Sie noch kein Konto haben, geben Sie hier eine Beschreibung des Problems in die Anzahl der Testfälle ein und anschließend eine Zeichenfolge, aus der Ihr Code eine Zeichenfolge mit allen Zeichen in den ungeraden Indizes und eine Zeichenfolge mit allen Zeichen erstellen soll in den geraden Indizes. Beispiel Eingabe

2
Hacker
Rank

kehrt zurüc

Hce akr
Rn ak

Einfach richtig? Hier ist der Code, den ich gemacht habe.

if let line = readLine(), numOftests = Int(line) {
    for iter in 0..<numOftests {
        var evenString = ""
        var oddString = ""
        var string = readLine()!
        var arrChars = [Character](string.characters)                           //1
        for idx in 0..<string.characters.count {
            if idx % 2 == 0 {
                oddString.append(arrChars[idx])                                 //1
                //oddString.append(string[string.startIndex.advancedBy(idx)])   //2 <= Times out
            }
            else {
                evenString.append(arrChars[idx])                                //1
                //evenString.append(string[string.startIndex.advancedBy(idx)])  //2 <= Times out
            }
        }
        print("\(oddString) \(evenString)")
    }
}

Ursprünglich habe ich den auskommentierten Code verwendet. Dies führte zu einer Auszeit. Zusammenfassend lässt sich sagen, dass die Verwendung des Subskriptionssystems für eine Zeichenfolge viel langsamer ist als die Indizierung eines Array von Zeichen. Es hat mich überrascht und wenn es nicht die Diskussionsgruppe im Hacker-Rang gegeben hätte, hätte ich keine Lösung gefunden. Jetzt regt es mich auf, weil ich nicht weiß, warum das einen Unterschied machen würde.

Antworten auf die Frage(2)

Ihre Antwort auf die Frage