Odpowiedzi:
Jest metoda (właściwie funkcja)
myArray.removeAll()
struct
si, a struktury mają w functions
przeciwieństwie do klas, które mają methods
.
Array
że są struct
s. Weteran kodujący Objective-C tutaj ...
removeAll()
. Jednak dobrą praktyką (dyscyplina pamięci) jest usuwanie wszystkich niepotrzebnych danych, gdy widok znika.
Zakładając, że odpowiedź @ vadian jest rozwiązaniem , chciałbym tylko zaznaczyć, że Twój kod nie działa.
Przede wszystkim indeksy tablic są oparte na 0, więc należy odpowiednio przepisać zakres:
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
Jednak ta implementacja spowoduje awarię. Jeśli masz tablicę 10 elementów, ostatni element zajmuje pozycję pod indeksem 9.
Używając tej pętli, w pierwszej iteracji element o indeksie 0 jest usuwany, co powoduje, że ostatni element przesuwa się w dół o indeksie 8.
W następnej iteracji element pod indeksem 1 jest usuwany, a ostatni element przesuwa się w dół pod indeksem 7. I tak dalej.
W pewnym momencie pętli próba usunięcia elementu dla nieistniejącego indeksu spowoduje awarię aplikacji.
Podczas usuwania elementów z tablicy w pętli najlepszym sposobem na zrobienie tego jest przejście w odwrotnej kolejności:
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
Gwarantuje to, że usunięte elementy nie zmieniają kolejności ani indeksu elementów, które nadal mają być przetworzone.
public extension Array where Element : Equatable { public mutating func remove(element: Element) -> Int { var occurrences = 0; for index in (0 ..< count).reverse() { if self[index] == element { removeAtIndex(index); occurrences += 1 } }; return occurrences } }
korzystnie nie tylko jeden wiersz, ale że kod powinien skompilować na jednej linii
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }
? Nie wiem jeszcze zbyt wiele o skuteczności, ale w ten sposób nie trzeba odwracać zasięgu, więc może jest szybszy.
Brakuje in
słowa kluczowego, które powoduje błąd. Kod powinien być:
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
Nie zadziała to jednak tak, jak można by się tego spodziewać z kilku powodów:
count - 1
co by wymagało1..<myArray.count
Jeśli próbujesz usunąć wszystkie rzeczy z tablicy, powinieneś zrobić tak, jak inni sugerowali i użyć:
myArray.removeAll()
W przypadku, gdy chcesz tylko pierwszy element i nic innego nie możesz uzyskać odniesienia do pierwszego obiektu, opróżnij tablicę, a następnie dodaj obiekt z powrotem:
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
count - 1
).
Twój kod powinien działać, po prostu jest poza zakresem.
Szybki 3
existingArray = []
W ten sposób ponownie przypisujesz pustą tablicę do istniejącej tablicy i określasz typ danych.
Alternatywnie możesz użyć, removeAll
który usuwa wszystkie elementy z tablicy i zapewnia opcję zachowania istniejącej pojemności.
existingArray.removeAll()
Jest to mutating
funkcja, która oznacza, że tablica wywołująca metodę zostanie zmieniona (pusta).
Kyle jest na dobrej drodze, ale jego kod zawiedzie, ponieważ możliwe indeksy zmniejszają się podczas wyliczania, co prowadzi do nielegalnych indeksów.
Jednym ze sposobów rozwiązania tego problemu jest wyliczanie wstecz. Robi się to szybko, używając kroków .
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
inną opcją byłoby użycie filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
Szybki 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
W języku Swift 2 dostępna jest metoda removeAllObjects ()
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
Aby usunąć element w określonym indeksie, użyj:
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
Aby usunąć ostatni element użyj:
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
Aby usunąć elementy z określonego zakresu użyj:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
Aby usunąć określony element, użyj:
Syntax : public func removeObject(anObject: AnyObject)
Poniższy zrzut ekranu pokazuje listę metod dostępnych w rozszerzeniu NSMutableArray
Możesz też to zrobić:
for _ in myArray
{
myArray.removeAtIndex(0)
}
Vadian ma poprawną odpowiedź dotyczącą tego, co próbujesz osiągnąć. Problem pokazany jako wynik przykładu kodu wynika ze sposobu, w jaki próbujesz utworzyć for
pętlę. Index
rozpocznie się domyślnie od 0. Dodanie zakresu liczb po tym, jak nie jest poprawnym sposobem tworzenia pętli for. Dlatego widzisz błąd. Zamiast tego utwórz pętlę for w następujący sposób:
for index in myArray.indices {
// Do stuff
}
Mamy nadzieję, że ta odpowiedź pomoże innym, którzy są nowicjuszami w Swift lub programowaniu.
Do usuwania wszystkich elementów tablicy
var array = [1,2,3,4,5,6]()
array.removeAll()