Saya mencoba untuk menghapus semua elemen array dengan for loop seperti ini:
for index 1...myArray.count {
myArray.removeAtIndex(index)
}
Tetapi tidak berhasil, saya mendapatkan kesalahan ini sebelum bulding:
Diharapkan ';' dalam pernyataan 'untuk'
Jawaban:
Ada metode (sebenarnya fungsi)
sumber
struct
s dan struct memilikifunctions
kelas yang tidak samamethods
.Array
s arestruct
s. Veteran Objective-C coder di sini ...removeAll()
. Namun, praktik yang baik (disiplin memori) untuk menghapus semua data yang tidak perlu saat tampilan menghilang.Menerima begitu saja bahwa jawaban @ vadian adalah solusinya , saya hanya ingin menunjukkan bahwa kode Anda tidak berfungsi.
Pertama-tama, indeks array berbasis 0, jadi Anda harus menulis ulang rentangnya sesuai:
Namun implementasi ini akan menyebabkan crash. Jika Anda memiliki array 10 elemen, elemen terakhir menempati posisi di indeks 9.
Dengan menggunakan loop tersebut, pada iterasi pertama elemen pada indeks 0 dihapus, dan itu menyebabkan elemen terakhir bergeser ke bawah pada indeks 8.
Pada iterasi berikutnya, elemen pada indeks 1 dihilangkan, dan elemen terakhir bergeser ke bawah pada indeks 7. Dan seterusnya.
Di beberapa titik dalam loop, upaya untuk menghapus elemen untuk indeks yang tidak ada akan menyebabkan aplikasi mogok.
Saat menghapus elemen dari larik dalam satu putaran, cara terbaik untuk melakukannya adalah dengan membukanya dalam urutan terbalik:
Itu memastikan bahwa elemen yang dihapus tidak mengubah urutan atau indeks elemen yang masih akan diproses.
sumber
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 } }
sebaiknya menggunakan tidak semua satu baris tetapi kode itu harus dikompilasi dalam satu barisfor _ in 0...<myArray.count { myArray.removeAtIndex(0) }
? Saya belum tahu banyak tentang efisiensi, tetapi dengan cara ini Anda tidak perlu membalikkan kisaran, jadi mungkin ini lebih cepat.Anda kehilangan
in
kata kunci yang menyebabkan kesalahan Anda. Kode tersebut harus:Namun ini tidak akan berfungsi seperti yang Anda harapkan karena beberapa alasan:
count - 1
yang dibutuhkan1..<myArray.count
Jika Anda mencoba untuk menghapus semua hal dari array maka Anda harus melakukan seperti yang disarankan dan digunakan orang lain:
Jika Anda hanya menginginkan elemen pertama dan tidak ada lagi yang bisa Anda dapatkan referensi ke objek pertama, kosongkan array, lalu tambahkan objek kembali:
sumber
count - 1
).Jika Anda benar-benar ingin menghapus array, cara termudah adalah dengan Melakukan Inisialisasi Ulang.
sumber
Kode Anda harus berfungsi, itu hanya di luar batas.
Cepat 3
Dengan melakukan ini, Anda menetapkan kembali array kosong ke array yang ada dan tipe data dirujuk.
Alternatifnya, Anda dapat menggunakan
removeAll
yang menghapus semua elemen dari larik dan memberikan opsi untuk mempertahankan kapasitas yang ada.Ini adalah
mutating
fungsi yang berarti array yang memanggil metode akan diubah (kosong).sumber
Kyle berada di jalur yang benar, tetapi kodenya akan gagal karena kemungkinan indeks berkurang selama pencacahan, yang mengarah ke indeks ilegal.
Salah satu cara untuk mengatasinya adalah dengan menghitung mundur. Dengan cepat ini dilakukan dengan menggunakan langkah .
pilihan lain akan digunakan
filter()
Swift 1.2.0
Cepat 2
sumber
stride
Ada metode removeAllObjects () yang tersedia di Swift 2
Untuk menghapus elemen pada penggunaan indeks tertentu:
Untuk menghapus penggunaan elemen terakhir:
Untuk menghapus elemen dalam penggunaan rentang tertentu:
Untuk menghapus penggunaan elemen tertentu:
Tangkapan layar di bawah ini menunjukkan daftar metode yang tersedia di ekstensi NSMutableArray
sumber
Anda juga bisa melakukan ini:
sumber
Untuk menghapus semua data dari array
yourArrayData.removeAll()
sumber
Vadian memiliki jawaban yang benar dalam hal apa yang ingin Anda capai. Masalah yang ditampilkan sebagai hasil dari sampel kode Anda disebabkan oleh cara Anda mencoba membuat
for
loop.Index
akan mulai dari 0 secara default. Menambahkan rentang angka setelah itu bukanlah cara yang benar untuk membuat perulangan for. Itulah mengapa Anda melihat kesalahan tersebut. Sebagai gantinya, buat loop for Anda sebagai berikut:Semoga jawaban ini akan membantu orang lain yang baru mengenal Swift atau pemrograman.
sumber
Untuk Menghapus Semua Elemen Array
sumber