vacio initialize arreglos array arrays swift

arrays - initialize - swift array filter



Cómo reorganizar el elemento de una matriz a una nueva posición en Swift? (9)

Actualizar con Swift 4, Swipe array index

for (index,addres) in self.address.enumerated() { if addres.defaultShipping == true{ let defaultShipping = self.address.remove(at: index) self.address.insert(defaultShipping, at: 0) } }

Considere la matriz [1,2,3,4] . ¿Cómo puedo reorganizar el elemento de la matriz a una nueva posición?

Por ejemplo:

put 3 into position 4 [1,2,4,3]

put 4 in to position 1 [4,1,2,3]

put 2 into position 3 [1,3,2,4] .


Swift 3.0+:

let element = arr.remove(at: 3) arr.insert(element, at: 2)

y en forma de función:

func rearrange<T>(array: Array<T>, fromIndex: Int, toIndex: Int) -> Array<T>{ var arr = array let element = arr.remove(at: fromIndex) arr.insert(element, at: toIndex) return arr }

Swift 2.0:

Esto pone 3 en posición 4.

let element = arr.removeAtIndex(3) arr.insert(element, atIndex: 2)

Incluso puedes hacer una función general:

func rearrange<T>(array: Array<T>, fromIndex: Int, toIndex: Int) -> Array<T>{ var arr = array let element = arr.removeAtIndex(fromIndex) arr.insert(element, atIndex: toIndex) return arr }

Aquí se necesita la var arr , porque no se puede mutar el parámetro de entrada sin especificar que esté in-out . Sin embargo, en nuestro caso obtenemos funciones puras sin efectos secundarios, lo cual es mucho más fácil de razonar, en mi opinión. Entonces podrías llamarlo así:

let arr = [1,2,3,4] rearrange(arr, fromIndex: 2, toIndex: 0) //[3,1,2,4]


¡Todas las respuestas excelentes! Aquí hay una solución Swift 4 más completa con el rendimiento en mente y una bonificación para los fanáticos de referencia y GIF. ✌️

extension Array where Element: Equatable { mutating func move(_ element: Element, to newIndex: Index) { if let oldIndex: Int = self.index(of: element) { self.move(from: oldIndex, to: newIndex) } } } extension Array { mutating func move(from oldIndex: Index, to newIndex: Index) { // Don''t work for free and use swap when indices are next to each other - this // won''t rebuild array and will be super efficient. if oldIndex == newIndex { return } if abs(newIndex - oldIndex) == 1 { return self.swapAt(oldIndex, newIndex) } self.insert(self.remove(at: oldIndex), at: newIndex) } }


No hay funcionalidad de movimiento en swift para matrices. puede tomar un objeto en un índice quitándolo de allí y colocarlo en su índice favorito usando ''insertar''

var swiftarray = [1,2,3,4] let myobject = swiftarray.removeAtIndex(1) // 2 is the object at 1st index let myindex = 3 swiftarray.insert(myobject, atIndex: myindex) // if you want to insert the object to a particular index here it is 3 swiftarray.append(myobject) // if you want to move the object to last index


Podemos usar el método de intercambio para intercambiar elementos en una matriz:

var arr = ["one", "two", "three", "four", "five"] // Swap elements at index: 2 and 3 print(arr) swap(&arr[2], &arr[3]) print(arr)


Sin embargo, la solución de Leo Dabus es excelente, ya que la condición previa (de! = A && indices.contains (de! = A && indices.contains (to), "índices inválidos") bloqueará la aplicación si no se cumplen las condiciones. Lo cambié para proteger y una declaración if: si por alguna razón no se cumplen las condiciones, no pasa nada y la aplicación continúa. Creo que deberíamos evitar hacer extensiones que puedan bloquear la aplicación. Si lo desea, podría hacer que la función de reorganización devuelva un Bool verdadero si es exitoso y falso si falla. La solución más segura:

extension Array { mutating func rearrange(from: Int, to: Int) { guard from != to else { return } //precondition(from != to && indices.contains(from) && indices.contains(to), "invalid indexes") if indices.contains(from) && indices.contains(to) { insert(remove(at: from), at: to) } }


buen consejo de Leo.

para Swift 3:

extension Array { mutating func rearrange(from: Int, to: Int) { insert(remove(at: from), at: to) } } var myArray = [1,2,3,4] myArray.rearrange(from: 1, to: 2) print(myArray)


editar / actualizar: Swift 3.x

extension RangeReplaceableCollection where Indices: Equatable { mutating func rearrange(from: Index, to: Index) { precondition(from != to && indices.contains(from) && indices.contains(to), "invalid indexes") insert(remove(at: from), at: to) } }

var numbers = [1,2,3,4] numbers.rearrange(from: 1, to: 2) print(numbers) // [1, 3, 2, 4]


var arr = ["one", "two", "three", "four", "five"] // Swap elements at index: 2 and 3 print(arr) arr.swapAt(2, 3) print(arr)