Подтвердить что ты не робот

IOS swift удаляет элементы массива из другого массива

У меня есть два массива

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

Я хочу удалить элементы array2 из array1

Result ["b", "e"]
4b9b3361

Ответ 1

Самый простой способ - преобразовать оба массива в множество, вычесть второе из первого, преобразовать в результат в массив и назначить его обратно array1:

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

Обратите внимание, что ваш код недействителен. Swift - вы можете использовать вывод типа для объявления и инициализации обоих массивов следующим образом:

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

Ответ 2

@решение Antonio более совершенное, но это сохраняет порядок, если это важно:

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

Ответ 3

Удалить элементы с помощью массива индексов:

  • Массив строк и индексов

    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"]
    
  • Массив целых чисел и индексов

    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]
    



Удалить элементы, используя значение элемента другого массива

  1. Массивы целых чисел

    let arrayResult = numbers.filter { element in
        return !indexesToRemove.contains(element)
    }
    print(arrayResult)
    
    //result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
    
  2. Массивы строк

    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"]
    

Ответ 4

Вы можете создать наборы, а затем использовать метод вычитания

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

Ответ 5

вне сферы действия, но это помогло бы мне, если бы оно было здесь. удаление subArray из массива в OBJECTIVE-C

NSPredicate* predicate = [NSPredicate predicateWithFormat:@"not (self IN %@)", subArrayToBeDeleted];
NSArray* finalArray = [initialArray filteredArrayUsingPredicate:predicate];

надеюсь, что это когда-нибудь поможет кому-то:)