Estoy tratando de eliminar algunos objetos de 1 matriz y moverlos a otro. Estoy haciendo esto quitándolos de una matriz invertida y agregándolos a otra matriz, así:

var array1 = [1,2,3,4,5,6]
var array2 = [1,2]
for (index, number) in array1.enumerated().reversed() {
    if(number>2) {
        array1.remove(at: index)
        array2.append(number)
    }
}

El problema es que los objetos en la matriz 2 obviamente están invertidos (1, 2, 6, 5, 4, 3). Fácilmente puedo encontrar soluciones complicadas, pero me preguntaba si hay formas directas de hacerlo.

¡Gracias de antemano!

0
Laurens Artapps 17 oct. 2017 a las 20:08

3 respuestas

La mejor respuesta

En lugar de append ing los números insert ellos

array2.insert(number, at: 2)

Puedes hacer lo mismo sin un bucle

let droppedItems = array1.dropFirst(2)
array1.removeLast(array1.count - 2)
array2.append(contentsOf: droppedItems)
1
vadian 17 oct. 2017 a las 17:20

Si te entiendo correctamente, quieres mover los números de array1 a array2 si son superiores a 2:

// get only numbers higher than 2 and append them to the second array
array2.append(contentsOf: array1.filter { $0 > 2 })
// filter the moved items from the first array
array1 = array1.filter { $0 <= 2 }

O

// split the array into two parts in place
let index = array1.partition { $0 > 2 }
// move the second part
array2 += array1[index...]
// remove the second part
array1.removeSubrange(index...)
1
Sulthan 17 oct. 2017 a las 20:03

Invertirlo, tomar subarreglos y luego agregar a array2. No necesita mutar array1. Algo como:

array2.append(contentsOf: array1.reversed()[0..<array1.count-1])
0
Steve Kuo 17 oct. 2017 a las 18:20