2017-10-17 25 views
0

Ich versuche, einige Objekte aus 1 Array zu entfernen, und verschieben Sie sie zu einem anderen. Ich tue dies, indem sie von einer umgekehrten Anordnung zu entfernen und sie in ein anderes Array hinzufügen, etwa so:(Swift) Verschieben von Objekten beim Iterieren über Array

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) 
    } 
} 

Das Problem ist, werden die Objekte in der Matrix 2 offensichtlich umgekehrt (1,2,6,5 , 4,3) Ich kann leicht mit komplizierten Umgehungslösungen kommen, aber ich frage mich, ob es irgendwelche einfachen Möglichkeiten gibt, dies zu tun.

Vielen Dank im Voraus!

+0

so was a Problem? Was möchten Sie tun? –

+0

Verwenden Sie Filter für Array –

+0

Wenn Ihr Problem Array2 umgekehrt ist, können Sie immer auch vor Array2 einfügen. – Aks

Antwort

0

Anstatt append die Zahlen ing insert sie

array2.insert(number, at: 2) 

Sie können

let droppedItems = array1.dropFirst(2) 
array1.removeLast(array1.count - 2) 
array2.append(contentsOf: droppedItems) 
0

es umkehren, ohne eine Schleife das gleiche tun, um array2 greifen Subarray dann anhängen. Sie müssen Array1 nicht mutieren. Etwas wie:

array2.append(contentsOf: array1.reversed()[0..<array1.count-1]) 
1

Wenn ich Sie richtig verstehe, wollen Sie Zahlen von array1 zu array2 bewegen, wenn sie höher sind als 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 } 

oder

// 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...) 
+0

Nicht ganz, es ist nur eine vereinfachte Version meines Codes. Aber immer noch danke, ich habe noch nie Filter benutzt, also lerne ich daraus. –