Array von n Elementen gegeben, das heißtSchaltelemente in einem Array von Index
var array = [1, 2, 3, 4, 5]
I eine Erweiterung der Array
schreiben kann, so dass ich Array modifizieren Ausgabe zu erreichen: [2, 3, 4, 5, 1]
:
mutating func shiftRight() {
append(removeFirst())
}
Gibt es eine Möglichkeit, eine solche Funktion zu implementieren, die Array um jeden Index, positiv oder negativ, verschieben würde. Ich kann diese Funktion im imperativen Stil mit if-else
Klauseln implementieren, aber was ich suche, ist die funktionale Implementierung.
Der Algorithmus ist einfach:
- Split-Array in zwei durch den Index bereitgestellt
- bis zum Ende der zweiten ersten Array append
Gibt es eine Möglichkeit, es in funktionellen umzusetzen Stil?
Der Code Ich habe mit fertig:
extension Array {
mutating func shift(var amount: Int) {
guard -count...count ~= amount else { return }
if amount < 0 { amount += count }
self = Array(self[amount ..< count] + self[0 ..< amount])
}
}
kann
Große Lösung. Die Funktion, die ich beendet habe, ist ein bisschen anders, aber ich mag besonders, wie Sie Shift behandeln, wenn die Verschiebung negativ ist. –
Ich habe den Code, mit dem ich fertig bin, zu meiner Frage hinzugefügt. Es ist ein bisschen anders, aber die Idee ist genau die gleiche. –
Saubere Lösung! Ich würde den Funktionsgedanken umbenennen, da die Verschiebung _in place_ nicht stattfindet. Ich verstehe jedoch, dass dies seine Mutationseigenschaft implizieren soll. –