Bagaimana saya bisa menghapus / menghapus elemen dari array di Swift bahasa baru Apple?
Ini beberapa kode:
let animals = ["cats", "dogs", "chimps", "moose"]
Bagaimana elemen tersebut animals[2]
dapat dihapus dari array?
Kata let
kuncinya adalah untuk mendeklarasikan konstanta yang tidak dapat diubah. Jika Anda ingin memodifikasi variabel, Anda harus menggunakan var
, misalnya:
var animals = ["cats", "dogs", "chimps", "moose"]
animals.remove(at: 2) //["cats", "dogs", "moose"]
Alternatif non-mutasi yang akan membuat koleksi asli tidak berubah adalah digunakan filter
untuk membuat koleksi baru tanpa elemen yang ingin Anda hapus, misalnya:
let pets = animals.filter { $0 != "chimps" }
remove
mengembalikan elemen yang dihapus:let animal = animals.remove(at: 2)
Diberikan
Hapus elemen pertama
Hapus elemen terakhir
Hapus elemen pada indeks
Hapus elemen indeks yang tidak diketahui
Hanya untuk satu elemen
Untuk banyak elemen
Catatan
filter
) dan mengembalikan elemen yang dihapus.dropFirst
ataudropLast
untuk membuat array baru.Diperbarui ke Swift 5.2
sumber
chimps && moose
misalnya? Saya mencari sesuatu yang berbeda dari{$0 != "chimps" && $0 != "moose"}
Jawaban di atas tampaknya menganggap bahwa Anda tahu indeks elemen yang ingin Anda hapus.
Seringkali Anda tahu referensi ke objek yang ingin Anda hapus dalam array. (Anda mengulangi melalui array Anda dan telah menemukannya, misalnya) Dalam kasus seperti itu mungkin lebih mudah untuk bekerja secara langsung dengan referensi objek tanpa juga harus melewati indeksnya di mana-mana. Oleh karena itu, saya menyarankan solusi ini. Ini menggunakan operator identitas
!==
, yang Anda gunakan untuk menguji apakah dua referensi objek keduanya merujuk ke instance objek yang sama.Tentu saja ini tidak hanya bekerja untuk
String
s.sumber
list = list.filter({ $0 != element })
array.indexOf({ $0 == obj })
list
penghapusan ini tidak akan memperbarui referensi array lain karena Anda menugaskan array barulist
. Implikasi yang halus jika Anda menghapus dari array dengan pendekatan ini.Swift 5: Berikut ini adalah ekstensi keren dan mudah untuk menghapus elemen dalam array, tanpa pemfilteran:
Penggunaan:
Juga berfungsi dengan tipe lain, seperti
Int
karenaElement
ini adalah tipe generik:sumber
Untuk Swift4:
sumber
Pada Xcode 10+, dan menurut sesi WWDC 2018 223, "Merangkul Algoritma," metode yang baik ke depan adalah
mutating func removeAll(where predicate: (Element) throws -> Bool) rethrows
Contoh Apple:
lihat Dokumentasi Apple
Jadi dalam contoh OP, menghilangkan hewan [2], "simpanse":
Metode ini lebih disukai karena berskala baik (linear vs kuadrat), mudah dibaca dan bersih. Ingatlah bahwa ini hanya berfungsi di Xcode 10+, dan saat penulisan ini masih dalam Beta.
sumber
Beberapa Operasi terkait dengan Array di Swift
Buat Array
Tambahkan Objek di Array
Dapatkan Nilai dari objek Indeks
Tambahkan Objek
Masukkan Objek di Indeks
Hapus Objek
Nilai Objek Concat
sumber
Anda bisa melakukannya. Pertama-tama pastikan
Dog
benar-benar ada dalam array, lalu hapus. Tambahkanfor
pernyataan jika Anda yakinDog
dapat terjadi lebih dari satu kali pada array Anda.Jika Anda yakin
Dog
keluar dalam array dan terjadi hanya sekali lakukan saja:Jika Anda memiliki keduanya, string dan angka
sumber
Jika Anda tidak tahu indeks elemen yang ingin Anda hapus, dan elemen tersebut sesuai dengan protokol Equatable, Anda dapat melakukannya:
animals.removeAtIndex(animals.indexOf("dogs")!)
Lihat Jawaban protokol yang setara: Bagaimana cara saya melakukan indexOfObject atau yang tepat memuatObject
sumber
Hapus elemen menggunakan array indeks:
Array String dan indeks
Array bilangan bulat dan indeks
Hapus elemen menggunakan nilai elemen array lain
Susunan bilangan bulat
Susunan string
sumber
Mengenai @ Suragch's Alternatif untuk "Hapus elemen indeks tidak dikenal":
Ada versi "indexOf (elemen)" yang lebih kuat yang akan cocok dengan predikat daripada objek itu sendiri. Itu berjalan dengan nama yang sama tetapi dipanggil oleh myObjects.indexOf {$ 0.property = valueToMatch}. Ini mengembalikan indeks item yang cocok pertama kali ditemukan di array myObjects.
Jika elemen adalah objek / struct, Anda mungkin ingin menghapus elemen itu berdasarkan nilai salah satu propertinya. Misalnya, Anda memiliki kelas mobil yang memiliki properti car.color, dan Anda ingin menghapus mobil "merah" dari mobil Anda.
Sudah bisa diduga, Anda bisa mengerjakan ulang ini untuk menghapus "semua" mobil merah dengan menyematkan pernyataan if di atas dalam loop repeat / while, dan melampirkan blok lain untuk mengatur flag untuk "break" keluar dari loop.
sumber
Cepat 5
sumber
Jika Anda memiliki berbagai objek kustom, Anda dapat mencari berdasarkan properti tertentu seperti ini:
atau jika Anda ingin mencari berdasarkan nama misalnya
sumber
Ini harus dilakukan (tidak diuji):
Sunting: dan Anda harus membuatnya
var
, bukan alet
, jika tidak, konstanta yang abadi.sumber
Saya datang dengan ekstensi berikut yang menangani penghapusan elemen dari
Array
, dengan asumsi elemen dalamArray
implementEquatable
:Pemakaian:
sumber
ekstensi untuk menghapus objek String
sumber
Saya menggunakan ekstensi ini, hampir sama dengan Varun, tetapi yang ini (di bawah) serba guna:
sumber
Untuk menghapus elemen dari array, gunakan
remove(at:)
,removeLast()
danremoveAll()
.Hapus nilai pada 2 posisi
Hapus nilai terakhir dari array
Menghapus semua anggota dari set
sumber