Yanıtlar:
Bir yöntem var (aslında bir işlev)
myArray.removeAll()
structve yapıların sahip oldukları functionssınıflara benzemeyenler vardır methods.
Arrayler vardır structler. Veteran Objective-C kodlayıcı burada ...
removeAll(). Ancak, bir görünüm kaybolduğunda tüm gereksiz verileri kaldırmak iyi bir (hafıza disiplini) uygulamadır.
@ Vadian'ın cevabının çözüm olduğunu varsayarsak , kodunuzun çalışmadığını belirtmek isterim.
Her şeyden önce, dizi dizinleri 0 tabanlıdır, bu nedenle aralığı uygun şekilde yeniden yazmalısınız:
for index 0..<myArray.count {
myArray.removeAtIndex(index)
}
Ancak bu uygulama bir çökmeye neden olacak. 10 öğeden oluşan bir diziniz varsa, son öğe dizin 9'daki konumu kaplar.
Bu döngüyü kullanarak, ilk yinelemede dizin 0'daki öğe kaldırılır ve bu, son öğenin dizin 8'de aşağı kaymasına neden olur.
Bir sonraki yinelemede, dizin 1'deki öğe kaldırılır ve son öğe, dizin 7'de aşağı kayar. Ve bu böyle devam eder.
Döngünün bir noktasında, mevcut olmayan bir dizine ait bir öğeyi kaldırma girişimi uygulamanın çökmesine neden olur.
Bir döngüdeki bir diziden öğeleri kaldırırken, bunu yapmanın en iyi yolu onu ters sırayla gezmektir:
for index in reverse(0..<myArray.count) {
myArray.removeAtIndex(index)
}
Bu, kaldırılan öğelerin, işlenecek öğelerin sırasını veya dizinini değiştirmemesini sağlar.
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 } }tercihen hepsi değil bir satır ama bu kod tek satırda derlemek gerekir
for _ in 0...<myArray.count { myArray.removeAtIndex(0) }? Henüz verimlilik hakkında pek bir şey bilmiyorum, ancak bu şekilde aralığı tersine çevirmenize gerek yok, bu yüzden belki daha hızlıdır.
Hatanıza inneden olan anahtar kelimeyi kaçırıyorsunuz . Kod şu şekilde olmalıdır:
for index in 1...myArray.count {
myArray.removeAtIndex(index)
}
Ancak bu, birkaç nedenden dolayı beklediğiniz gibi çalışmayacaktır:
count - 1gerektirecek1..<myArray.countDiziden her şeyi kaldırmaya çalışıyorsanız, diğerlerinin önerdiği gibi yapmalı ve kullanmalısınız:
myArray.removeAll()
Yalnızca ilk öğeyi istemeniz ve başka hiçbir şey istememeniz durumunda, ilk nesneye bir başvuru alamazsınız, diziyi boşaltın ve ardından nesneyi tekrar ekleyin:
var firstElement = myArray.first!
myArray.removeAll()
myArray.append(firstElement)
count - 1).
Kodunuz çalışmalı, sınırın dışında.
Hızlı 3
existingArray = []
Bunu yaparak, mevcut diziye boş bir diziyi yeniden atarsınız ve veri türü başvurulur.
Alternatif olarak, removeAlldizideki tüm öğeleri kaldıran ve mevcut kapasiteyi korumak için bir seçenek sunan seçeneğini kullanabilirsiniz.
existingArray.removeAll()
Bu, mutatingyöntemi çağıran dizinin değiştirileceği (boş) anlamına gelen bir işlevdir.
Kyle doğru yoldadır, ancak numaralandırma sırasında olası endeksler azaldığından kodu başarısız olacak ve yasa dışı endekslere yol açacaktır.
Bunu çözmenin bir yolu geriye doğru numaralandırmaktır. Hızlı bir şekilde bu adımlarla yapılır .
for index in stride(from: myArray.count - 1, through: 0, by: -1) {
myArray.removeAtIndex(index)
}
başka bir seçenek kullanmak olabilir filter()
Swift 1.2
myArray = filter(myArray, { (obj) -> Bool in
return false
})
Swift 2
myArray = myArray.filter{ (obj) -> Bool in
return false
}
stride
Orada removeAllObjects () Swift 2 uygun bir yöntem
Syntax : public func removeAllObjects()
Eg.: mainArray.removeAllObjects
Belirli bir dizindeki öğeyi kaldırmak için şunu kullanın:
Syntax : public func removeObjectAtIndex(index: Int)
Eg.: mainArray.removeObjectAtIndex(5)
Son element kullanımını kaldırmak için:
Syntax : public func removeLastObject()
Eg.: mainArray.removeLastObject()
Belirli aralıktaki öğeleri kaldırmak için şunları kullanın:
Syntax : public func removeObject(anObject: AnyObject, inRange range: NSRange)
Belirli element kullanımını kaldırmak için:
Syntax : public func removeObject(anObject: AnyObject)
Aşağıdaki ekran görüntüsü NSMutableArray uzantısında bulunan yöntemlerin listesini gösterir
Bunu da yapabilirsiniz:
for _ in myArray
{
myArray.removeAtIndex(0)
}
Vadian, başarmaya çalıştığınız şey açısından doğru cevaba sahip. Kod örneğinizin bir sonucu olarak gösterilen sorun, fordöngüyü oluşturmaya çalışma şeklinizden kaynaklanmaktadır . Indexvarsayılan olarak 0'dan başlayacaktır. Bir for döngüsü oluşturmanın doğru yolu bundan sonra bir sayı aralığı eklemek değildir. Bu yüzden hatayı görüyorsunuz. Bunun yerine, for döngüsünüzü aşağıdaki gibi oluşturun:
for index in myArray.indices {
// Do stuff
}
Umarım bu cevap Swift'e veya programlamaya yeni başlayanlara yardımcı olur.
Dizinin Tüm Öğelerini Kaldırmak İçin
var array = [1,2,3,4,5,6]()
array.removeAll()