Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

iOS swift remove elements of an array from another array

Tags:

arrays

ios

swift

I have two arrays

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

I want to remove elements of array2 from array1

Result ["b", "e"]
like image 891
Dev Imak Avatar asked Aug 13 '15 09:08

Dev Imak


3 Answers

@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) }
like image 138
jrc Avatar answered Nov 14 '22 19:11

jrc


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"]
like image 20
Antonio Avatar answered Nov 14 '22 20:11

Antonio


Remove elements using indexes array:

  1. 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"]
    
  2. 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

  1. 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]
    
  2. 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"]
    
like image 9
Krunal Avatar answered Nov 14 '22 19:11

Krunal