Quitar elemento de matriz específico, igual a cadena – Swift

¿No hay una manera fácil de eliminar un elemento específico de una matriz, si es igual a una secuencia dada? Las soluciones provisionales son encontrar el índice del elemento de la matriz que desea eliminar, y luego removeAtIndex , o crear una nueva matriz donde anexa todos los elementos que no son iguales a la cadena dada. ¿Pero no hay una forma más rápida?

Puede usar el filter () para filtrar su matriz de la siguiente manera

 var myArrayOfStrings = ["Hello","Playground","World"] myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"} print(myArrayOfStrings) // "[Playground, World]" 

No está claro si por más rápido quieres decir en términos de time de ejecución o cantidad de código.

En este último caso, puede crear fácilmente una copy utilizando el método de filter . Por ejemplo, dada la siguiente matriz:

 let array = ["1", "2", "3", "4", "5"] 

puede crear una copy con todos los elementos pero "2" como:

 let filtenetworkingArray = array.filter { $0 != "2" } 

Deseará usar el filter() . Si tiene un solo elemento (llamado decir obj ) para eliminar, entonces el pnetworkingicado del filter() será { $0 != obj } . Si haces esto repetidamente para una gran variedad, esto podría ser un problema de performance. Si puede aplazar la eliminación de objects individuales y desea eliminar una sub-matriz completa, use algo como:

 var stringsToRemove : [String] = ... var strings : [String] = ... strings.filter { !contains(stringsToRemove, $0) } 

por ejemplo:

  1> ["a", "b", "c", "d"].filter { !contains(["b", "c"], $0) } $R5: [String] = 2 values { [0] = "a" [1] = "d" } 

Puede usar el filter () en combinación con la sobrecarga del operador para producir una solución fácilmente repetible :

 func -= (inout left: [String], right: String){ left = left.filter{$0 != right} } var myArrayOfStrings:[String] = ["Hello","Playground","World"] myArrayOfStrings -= "Hello" print(myArrayOfStrings) // "[Playground, World]" 

si necesita eliminar subArray de array, esta es una solución perfecta con Swift3 :

 var array = ["a", "b", "c", "d", "e", "f", "g", "h", "i", "j"] let subArrayToDelete = ["c", "d", "e", "ee"] array = array.filter{ !subArrayToDelete.contains($0) } print(array) // ["a", "b", "f", "g", "h", "i", "j"] 

Esto es mejor para su performance en lugar de eliminar uno por uno.

Por cierto, la solución aún más rápida es (pero reorganizará los elementos en la matriz final):

 array = Array(Set(array).subtracting(subArrayToDelete)) 

Usar el filter como se sugiere arriba es bueno. Pero si desea eliminar solo una ocurrencia de un valor o supone que no hay duplicates en la matriz y desea un algorithm más rápido, use esto (en Swift3):

 if let index = array.index(of: "stringToRemove") { array = array.remove(at: index) } else { // not found }