Task:
Write a function which rotates all elements of a given array to the right.
Example: [1, 2, 3] => [3, 1, 2]
My solution:
func rotateRight(array ary: [Int]) -> [Int] {
guard ary.isEmpty == false else {
return ary
}
var copy = ary
let last = ary.last
var i = ary.count - 1
while i > 0 {
copy[i] = copy[i - 1]
i -= 1
}
copy[0] = last!
return copy
}
var ary1 = [1, 2, 3]
print(rotateRight(array: ary1)) // [3, 1, 2]
var ary2 = [1, 1, 2, 3, 3, 4]
print(rotateRight(array: ary2)) // [4, 1, 1, 2, 3, 3]
var ary3 = [Int]()
print(rotateRight(array: ary3)) // []
var ary4 = [1]
print(rotateRight(array: ary4)) // [1]
I have to make a copy of the array because Swift-parameter are immutable. Do I handle the issue in a proper way? Or should it be done differently?
Is there a better way to solve the described task?
guard let last = ary.last else { return ary }; return [last] + ary.dropLast()\$\endgroup\$return ary.isEmpty ? ary : ary.suffix(1) + ary.prefix(ary.count - 1)\$\endgroup\$