Как можно удалить / удалить элемент из массива на новом языке Apple Swift?
Вот некоторый код:
let animals = ["cats", "dogs", "chimps", "moose"]
Как можно animals[2]
удалить элемент из массива?
let
Ключевое слово для объявления констант , которые не могут быть изменены. Если вы хотите изменить переменную, вы должны использовать var
вместо этого, например:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
Не изменяющая альтернатива, которая сохранит исходную коллекцию без изменений, - это использовать filter
для создания новой коллекции без элементов, которые вы хотите удалить, например:
let pets = animals.filter { $0 != "chimps" }
remove
возвращает удаленный элемент:let animal = animals.remove(at: 2)
Дано
Удалить первый элемент
Удалить последний элемент
Удалить элемент в индексе
Удалить элемент неизвестного индекса
Только для одного элемента
Для нескольких элементов
Ноты
filter
) и возвращают удаленный элемент.dropFirst
илиdropLast
для создания нового массива.Обновлено до Swift 5.2
источник
chimps && moose
например? Я ищу что-то другое, чем{$0 != "chimps" && $0 != "moose"}
Представленные выше ответы предполагают, что вы знаете индекс элемента, который хотите удалить.
Часто вы знаете ссылку на объект, который хотите удалить в массиве. (Вы перебрали свой массив и нашли его, например). В таких случаях может быть проще работать напрямую со ссылкой на объект, не пропуская при этом всюду его индекс. Следовательно, я предлагаю это решение. Он использует оператор идентификации
!==
, который вы используете, чтобы проверить, ссылаются ли обе ссылки на один и тот же экземпляр объекта.Конечно, это не просто работает для
String
с.источник
list = list.filter({ $0 != element })
array.indexOf({ $0 == obj })
list
это удаление, они не обновят другие ссылки на массив, поскольку вы назначаете новый массивlist
. Просто тонкий смысл, если вы удалите из массивов с таким подходом.Swift 5: Вот классное и простое расширение для удаления элементов в массиве без фильтрации:
Использование :
Также работает с другими типами, например, так
Int
какElement
это универсальный тип:источник
Для Swift4:
источник
Начиная с Xcode 10+ и в соответствии с сеансом 223 WWDC 2018 «Использование алгоритмов», хорошим способом продвижения вперед будет
mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Пример Apple:
см . документацию Apple
Так в примере ОП, удаляя животных [2], «шимпанзе»:
Этот метод может быть предпочтительным, потому что он хорошо масштабируется (линейный или квадратичный), удобочитаем и чист. Имейте в виду, что это работает только в Xcode 10+, и на момент написания статьи это в бета-версии.
источник
Мало Операция относится к массиву в Swift
Создать массив
Добавить объект в массив
Получить значение из объекта Index
Добавить объект
Вставить объект в указатель
Удалить объект
Concat Object value
источник
Вы могли бы сделать это. Сначала убедитесь, что
Dog
действительно существует в массиве, а затем удалите его. Добавьтеfor
оператор, если вы считаете, что этоDog
может произойти более одного раза в вашем массиве.Если вы уверены, что
Dog
выходы из массива произошли только один раз, просто сделайте это:Если у вас есть и строки, и числа
источник
Если вы не знаете индекс элемента, который хотите удалить, и элемент соответствует протоколу Equatable, вы можете сделать:
animals.removeAtIndex(animals.indexOf("dogs")!)
См. Эквивалентный ответ по протоколу: Как мне сделать indexOfObject или правильно содержащийObject
источник
Удалить элементы с помощью массива indexes:
Массив строк и индексов
Массив целых чисел и индексов
Удалить элементы, используя значение элемента другого массива
Массивы целых чисел
Массивы строк
источник
Относительно альтернативы @ Suragch "Удалить элемент неизвестного индекса":
Существует более мощная версия indexOf (element), которая будет соответствовать предикату, а не самому объекту. Он имеет то же имя, но называется myObjects.indexOf {$ 0.property = valueToMatch}. Возвращает индекс первого соответствующего элемента, найденного в массиве myObjects.
Если элемент является объектом / структурой, вы можете удалить этот элемент на основе значения одного из его свойств. Например, у вас есть класс Car с свойством car.color, и вы хотите удалить «красный» автомобиль из вашего carsArray.
Как и ожидалось, вы могли бы переработать это, чтобы удалить «все» красные машины, добавив вышеприведенный оператор if в цикл repeat / while и прикрепив блок else, чтобы установить флаг для «выхода» из цикла.
источник
Swift 5
источник
Если у вас есть массив пользовательских объектов, вы можете искать по определенному свойству, например так:
или если вы хотите искать по имени, например
источник
Это должно сделать это (не проверено):
Изменить: и вам нужно сделать это, а
var
неlet
, иначе это неизменяемая константа.источник
Я придумал следующее расширение, которое заботится об удалении элементов из
Array
, предполагая элементы вArray
орудииEquatable
:Использование:
источник
расширение для удаления объекта String
источник
Я использую это расширение, почти такое же, как у Варуна, но это (ниже) универсально:
источник
Чтобы удалить элементы из массива, используйте
remove(at:)
,removeLast()
иremoveAll()
.Удалить значение в 2 позиции
Удалить последнее значение из массива
Удаляет всех участников из набора
источник