iOS swift remove elements of an array from another array
@Antonio's solution is more performant, but this preserves ordering, if that's important:
var array1 = ["a", "b", "c", "d", "e"]let array2 = ["a", "c", "d"]array1 = array1.filter { !array2.contains($0) }
The easiest way is to convert both arrays to sets, subtract the second from the first, convert to the result to an array and assign it back to array1
:
array1 = Array(Set(array1).subtracting(array2))
Note that your code is not valid Swift - you can use type inference to declare and initialize both arrays as follows:
var array1 = ["a", "b", "c", "d", "e"]var array2 = ["a", "c", "d"]
Remove elements using indexes array:
Array of Strings and indexes
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"]
Array of Integers and indexes
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]
Remove elements using element value of another array
Arrays of integers
let arrayResult = numbers.filter { element in return !indexesToRemove.contains(element)}print(arrayResult)//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
Arrays of strings
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"]