width = 5
num = 3
formatted = (width - len(str(num))) * "0" + str(num)
print formatted
Ключевое слово let
- это объявление констант, которые нельзя изменить. Если вы хотите изменить переменную, вы должны использовать var
вместо этого, например:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
Альтернатива без мутаций, которая сохранит исходную коллекцию без изменений, заключается в использовании filter
для создания новой коллекции без элементов, которые вы хотите удалить, например:
let pets = animals.filter { $0 != "chimps" }
Если у вас есть массив пользовательских объектов, вы можете выполнить поиск по определенному свойству:
if let index = doctorsInArea.indexOf({$0.id == doctor.id}){
doctorsInArea.removeAtIndex(index)
}
или если вы хотите искать по имени, например
if let index = doctorsInArea.indexOf({$0.name == doctor.name}){
doctorsInArea.removeAtIndex(index)
}
Это должно сделать это (не проверено):
animals[2..3] = []
Изменить: вам нужно сделать var
, а не let
, в противном случае это постоянная константа.
Если вы не знаете индекс элемента, который хотите удалить, и элемент соответствует протоколу Equatable, вы можете сделать:
animals.removeAtIndex(animals.indexOf("dogs")!)
См. Ответ на условный протокол: Как сделать indexOfObject или надлежащий containsObject
Как и в Xcode 10+, и в соответствии с WWDC 2018 сеансом 223, «Embracing Algorithms», , хороший способ продвижения будет mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Пример Apple:
var phrase = "The rain in Spain stays mainly in the plain."
let vowels: Set<Character> = ["a", "e", "i", "o", "u"]
phrase.removeAll(where: { vowels.contains($0) })
// phrase == "Th rn n Spn stys mnly n th pln."
Итак, в примере OP, удаляя животных [2], «шимпанзе»:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.removeAll(where: { $0 == "chimps" } )
// or animals.removeAll { $0 == "chimps" }
Этот метод может быть предпочтительнее, потому что он хорошо масштабируется (линейный и квадратичный), является читаемым и чистым. Имейте в виду, что он работает только в Xcode 10+, а с момента написания - в бета-версии.
var indexForDelete = 0
let yourArray = [String]()
let newArray = [String]()
for obj in yourArray {
if conduction == true{
newArray.append(obj) //all object which is you want to add in second array (newArray)
}else{
//all remaining object which is you want to delete from yourArray
}
}
// теперь ваш newArray фильтруется
Вы могли бы это сделать. Сначала убедитесь, что Dog
действительно существует в массиве, а затем удалите его. Добавьте инструкцию for
, если вы считаете, что Dog
может произойти более одного раза в вашем массиве.
var animals = ["Dog", "Cat", "Mouse", "Dog"]
let animalToRemove = "Dog"
for object in animals
{
if object == animalToRemove{
animals.removeAtIndex(animals.indexOf(animalToRemove)!)
}
}
Если вы уверены, что Dog
завершает работу в массиве и происходит только один раз, выполните следующее:
animals.removeAtIndex(animals.indexOf(animalToRemove)!)
Если у вас есть и строки, и числа
var array = [12, 23, "Dog", 78, 23]
let numberToRemove = 23
let animalToRemove = "Dog"
for object in array
{
if object is Int
{
// this will deal with integer. You can change to Float, Bool, etc...
if object == numberToRemove
{
array.removeAtIndex(array.indexOf(numberToRemove)!)
}
}
if object is String
{
// this will deal with strings
if object == animalToRemove
{
array.removeAtIndex(array.indexOf(animalToRemove)!)
}
}
}
Я использую это расширение, почти такое же, как у Varun, но этот (ниже) является универсальным:
extension Array where Element: Equatable {
mutating func delete(element: Iterator.Element) {
self = self.filter{$0 != element }
}
}
Удалить элементы с использованием массива индексов:
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]
Удалить элементы, используя значение элемента другого массива
let arrayResult = numbers.filter { element in
return !indexesToRemove.contains(element)
}
print(arrayResult)
//result - [0, 1, 2, 4, 6, 7, 9, 10, 11]
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"]
Я придумал следующее расширение, которое заботится об удалении элементов из Array
, предполагая элементы в реализации Array
Equatable
:
extension Array where Element: Equatable {
mutating func removeEqualItems(item: Element) {
self = self.filter { (currentItem: Element) -> Bool in
return currentItem != item
}
}
mutating func removeFirstEqualItem(item: Element) {
guard var currentItem = self.first else { return }
var index = 0
while currentItem != item {
index += 1
currentItem = self[index]
}
self.removeAtIndex(index)
}
}
var test1 = [1, 2, 1, 2]
test1.removeEqualItems(2) // [1, 1]
var test2 = [1, 2, 1, 2]
test2.removeFirstEqualItem(2) // [1, 1, 2]
В отношении альтернативы @ Suragch для «Удалить элемент неизвестного индекса»:
Существует более мощная версия «indexOf (element)», которая будет соответствовать предикату, а не самому объекту. Он имеет одно имя, но он называется myObjects.indexOf {$ 0.property = valueToMatch}. Он возвращает индекс первого совпадающего элемента, найденного в массиве myObjects.
Если элемент является объектом / структурой, вы можете удалить этот элемент на основе значения одного из его свойств. Например, у вас есть класс Car, у которого есть свойство car.color, и вы хотите удалить «красный» автомобиль с вашего автомобиля.
if let validIndex = (carsArray.indexOf{$0.color == UIColor.redColor()}) {
carsArray.removeAtIndex(validIndex)
}
Возможно, вы можете переделать это, чтобы удалить «все» красные автомобили путем вложения вышеприведенного оператора if в цикл repeat / while и присоединения блока else, чтобы установить флаг «break» из цикла.
Swift 3: Это классное и простое расширение для удаления элементов в массиве без фильтрации:
extension Array where Element: Equatable {
// Remove first collection element that is equal to the given `object`:
mutating func remove(object: Element) {
if let index = index(of: object) {
remove(at: index)
}
}
}
Использование:
var myArray = ["cat", "barbecue", "pancake", "frog"]
let objectToRemove = "cat"
myArray.remove(object: objectToRemove) // ["barbecue", "pancake", "frog"]
Задано
var animals = ["cats", "dogs", "chimps", "moose"]
animals.removeFirst() // "cats"
print(animals) // ["dogs", "chimps", "moose"]
animals.removeLast() // "moose"
print(animals) // ["cats", "dogs", "chimps"]
animals.remove(at: 2) // "chimps"
print(animals) // ["cats", "dogs", "moose"]
Только для одного элемента
if let index = animals.index(of: "chimps") {
animals.remove(at: index)
}
print(animals) // ["cats", "dogs", "moose"]
Для нескольких элементов
var animals = ["cats", "dogs", "chimps", "moose", "chimps"]
animals = animals.filter(){$0 != "chimps"}
print(animals) // ["cats", "dogs", "moose"]
Или, альтернативно
animals.index(of: "chimps").map { animals.remove(at: $0) }
filter
) и возвращают удаленный элемент. dropFirst
или dropLast
для создания нового массива. Обновлено до Swift 3
Для Swift4:
list = list.filter{$0 != "your Value"}
для удаления объекта String
extension Array {
mutating func delete(element: String) {
self = self.filter() { $0 as! String != element }
}
}
Мало Операция относится к массиву в Swift
Create Array
var stringArray = ["One", "Two", "Three", "Four"]
Добавить объект в массив
stringArray = stringArray + ["Five"]
Получить значение из объекта Index
let x = stringArray[1]
Append Object
stringArray.append("At last position")
Вставить объект в индекс
stringArray.insert("Going", atIndex: 1)
Удалить объект
stringArray.removeAtIndex(3)
Значение Concat Object
var string = "Concate Two object of Array \(stringArray[1]) + \(stringArray[2])"