ios remove Удалить определенный элемент массива, равный строке-Swift




swift remove object from array (5)

Использовать фильтр, как показано выше, хорошо. Но если вы хотите удалить только одно вхождение значения или предположите, что в массиве нет дубликатов, и вы хотите использовать более быстрый алгоритм, используйте это (в Swift3):

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

Нет ли простого способа удалить определенный элемент из массива, если он равен заданной строке? Обходные пути - найти индекс элемента массива, который вы хотите удалить, а затем removeAtIndex или создать новый массив, в котором вы добавите все элементы, которые не равны данной строке. Но нет ли более быстрого пути?


если вам нужно удалить subArray из массива, то это идеальное решение с использованием 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"]

это лучше для вашей работы, а не для удаления по одному.

btw даже более быстрое решение (но оно будет переставлять элементы в конечном массиве):

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

Вы можете использовать filter () для фильтрации вашего массива следующим образом

var myArrayOfStrings = ["Hello","Playground","World"]

myArrayOfStrings = myArrayOfStrings.filter{$0 != "Hello"}

print(myArrayOfStrings)   // "[Playground, World]"

Неясно, если быстрее вы имеете в виду время выполнения или количество кода.

В последнем случае вы можете легко создать копию с использованием метода filter . Например, учитывая следующий массив:

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

вы можете создать копию со всеми элементами, но «2»:

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

Вы захотите использовать filter() . Если у вас есть один элемент (называемый say obj ) для удаления, то предикат filter() будет { $0 != obj } . Если вы делаете это повторно для большого массива, это может быть проблемой производительности. Если вы можете отложить удаление отдельных объектов и хотите удалить весь подматрица, используйте следующее:

var stringsToRemove : [String] = ...
var strings : [String] = ...

strings.filter { !contains(stringsToRemove, $0) }

например:

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




elements