iOS rápidamente elimina elementos de una matriz de otra matriz

Tengo dos arreglos

var array1 = new Array ["a", "b", "c", "d", "e"] var array2 = new Array ["a", "c", "d"] 

Quiero eliminar elementos de array2 de array1

 Result ["b", "e"] 

La forma más fácil es convertir ambas matrices en sets, restar el segundo de la primera, convertir el resultado en una matriz y asignarlo de nuevo a array1 :

 array1 = Array(Set(array1).subtracting(array2)) 

Tenga en count que su código no es válido Swift: puede utilizar la inferencia de tipo para declarar e inicializar ambas arrays de la siguiente manera:

 var array1 = ["a", "b", "c", "d", "e"] var array2 = ["a", "c", "d"] 

La solución de @ Antonio es más efectiva, pero esto mantiene el order, si eso es importante:

 var array1 = ["a", "b", "c", "d", "e"] let array2 = ["a", "c", "d"] array1 = array1.filter { !array2.contains($0) } 

Eliminar elementos mediante matriz de índices:

  1. Conjunto de cadenas e índices

     let animals = ["cats", "dogs", "chimps", "moose", "squarrel", "cow"] let indexAnimals = [0, 3, 4] let arrayRemainingAnimals = animals .enumerated() .filter { !indexAnimals.contains($0.offset) } .map { $0.element } print(arrayRemainingAnimals) //result - ["dogs", "chimps", "cow"] 
  2. Conjunto de integers e índices

     var numbers = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12] let indexesToRemove = [3, 5, 8, 12] numbers = numbers .enumerated() .filter { !indexesToRemove.contains($0.offset) } .map { $0.element } print(numbers) //result - [0, 1, 2, 4, 6, 7, 9, 10, 11] 

Eliminar elementos utilizando el valor del elemento de otra matriz

  1. Matrices de integers

     let arrayResult = numbers.filter { element in return !indexesToRemove.contains(element) } print(arrayResult) //result - [0, 1, 2, 4, 6, 7, 9, 10, 11] 
  2. Matrices de cadenas

     let arrayLetters = ["a", "b", "c", "d", "e", "f", "g", "h", "i"] let arrayRemoveLetters = ["a", "e", "g", "h"] let arrayRemainingLetters = arrayLetters.filter { !arrayRemoveLetters.contains($0) } print(arrayRemainingLetters) //result - ["b", "c", "d", "f", "i"] 

Puede crear sets y luego usar el método de sustracción

 let setA = Set(arr1) let setB = Set(arr2) setA.subtract(set2) 

fuera del scope pero me ayudaría si hubiera estado aquí. eliminando subArray de array en OBJECTIVE-C

 NSPnetworkingicate* pnetworkingicate = [NSPnetworkingicate pnetworkingicateWithFormat:@"not (self IN %@)", subArrayToBeDeleted]; NSArray* finalArray = [initialArray filtenetworkingArrayUsingPnetworkingicate:pnetworkingicate]; 

Espero que alguna vez ayude a alguien 🙂