Konten array sering harus diubah, seperti ketika perlu menghapus item dari inventaris pemain. Lua memiliki fungsi pra-dibangun untuk digunakan dengan tabel untuk membuat ini lebih mudah.
Artikel ini akan menyoroti fungsi pra-dibangun untuk tabel seperti add dan remove saat menjelaskan cara mencari nilai.
Untuk menerapkan keterampilan ini, Anda akan membuat script yang membantu mengelola inventaris pemain dalam game.
MenambahkanNilai ke Arrays
Untuk menambahkan nilai baru ke matri, gunakan table.insert(array, valueToInsert) . Parameter kedua dapat menjadi apa pun nilai seperti string, angka, atau seluruh objek, seperti Player atau IntValue .
Untuk berlatih, Anda akan menciptakan script yang menyimpan item pemain di tabel, lalu tambahkan ke itu. Karena contoh ini hanya sebuah script, itu dapat digunakan dengan file atau proyek apa pun. Menguji kode akan dilakukan menggunakan Jendela Keluar.
Buat array kosong bernama playerItems .
playerItems = {}Tambahkan item inventaris ke array dengan mengetik table.insert() . Dalam huruf, ketik playerItems, tabel untuk ditambahkan, diikuti oleh string untuk setiap item. Sisipkan setidaknya tiga nilai.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping Bag")print(playerItems)Jalankan proyek. PadaOutput, ekspor tiga titik ... untuk melihat tabel cetak.
MenghapusNilai dari Arrays
Untuk menghapus nilai, seperti jika seorang pemain menggunakan item atau seseorang dalam daftar pemain aktif meninggalkan pengalaman, gunakan table.remove() . Tergantung pada parameter yang disediakan, fungsi ini dapat menghapus nilai terakhir dari tabel, atau di indeks tertentu.
MenghapusNilai Terakhir
Terkadang, sebuah script perlu menghapus item tertentu. kejadian, menghapus item pertama dalam inventaris pemain, atau memilih pemain pertama dalam daftar. Untuk menghapus nilai terakhir dalam matriks, gunakan table.remove(arrayName) . Dalam kasus penggunaan ini, satu-satunya parameter yang dibutuhkan adalah tabel itu sendiri.
Gunakan array item dari contoh sebelumnya. Kemudian, untuk menghapus nilai terakhir dari tabel, dalam hal ini "Sleeping Bag" , jenis table.remove(playerItems)
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems)print(playerItems)Jalankan proyek. Di jendela Keluar, nilai terakhir, "Sleeping Bag", seharusnya tidak dicetak.
Menghapus dengan Index
Untuk menghapus nilai di titik tertentu dalam array, masukkan parameter kedua untuk menghapus, seperti table.remove(arrayName, 1) .
Menggunakan tabel yang sama, ketik table.remove() . Dalam parameter, masukkan nama tabel dan 1, nilai untuk dihapus.
playerItems = {}table.insert(playerItems, "Potion")table.insert(playerItems, "Bread")table.insert(playerItems, "Sleeping bag")table.remove(playerItems, 1)Lari proyek. Periksa bahwa nilai pertama, "Ramuan" telah dihapus.
MencariNilai dalam Array
Untuk menemukan nilai spesifik dalam array, seperti nama pemain yang menang, gunakan fungsi table.find(). Alternatifnya, Anda dapat menulis fungsi pencarian Anda sendiri menggunakan for루프 dan if pernyataan.
Menemukan dan Mengembalikan Nilai Tunggal
Untuk menemukan nilai dalam matri, buat fungsi bernama findValue() yang pergi melalui matri dan berhenti saat pertama kali menemukan nilai yang cocok.
Setelah menemukan nilainya, fungsi akan menggunakan kata kunci return untuk mengembalikan indeks nilai tersebut. Dengan indeks, Anda dapat menghapusnya dari array.
Kopi array bernama playerItems di bawah ini.
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Kode fungsi baru bernama findValue() dengan dua parameter:
whichArray - array untuk dicari.
itemName - string khusus untuk diperiksa.
local function findValue(whichArray, itemName)end
Dalam findValue(), gunakan for loop untuk memeriksa apakah nilai dalam array cocok dengan itemName . Jika nilai cocok, gunakan kata kunci return untuk mengembalikan nilai yang ditemukan di 1> currentIndex1> .
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName thenreturn currentIndexendendendUji fungsi pencarian dengan menciptakan variabel bernama valueFound dan memanggil findValue() . Melewati array untuk mencari, dan nilai apa yang harus dicari. Jalankan kode untuk mengonfirmasi bahwa hasil yang diharapkan adalah indeks 2.
local function findValue(whichArray, itemName)for currentIndex = 1, #whichArray doif whichArray[currentIndex] == itemName then--Mengirim nilai currentIndex kembalireturn currentIndexendendendlocal valueFound = findValue(playerItems, "Bread")print("The value is at index " .. valueFound)
MenghapusNilai
Jika nilai ditemukan menggunakan fungsi temukan, itu dapat dihapus. Periksa apakah nilai ditemukan dengan if statement.
Periksa apakah nilai berada di dalam valueFound ; jika demikian, hapus nilai menggunakan table.remove().
if valueFound thentable.remove(playerItems, valueFound)endCetak daftar menggunakan kode di bawah ini.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endMainkan dan periksa bahwa nilai pertama "Bread" dari array telah dihapus. Coba menghapus nilai lain dengan mengubah parameter kedua dalam findValue() .
Perhatikan bahwa karena fungsi ini dipanggil sekali, hanya contoh pertama dari "Bread" yang dihapus. Bagian berikut akan menjelaskan cara menemukan dan menghapus semua contoh.
Menemukan dan Menghapus Semua Nilai Tertentu
Sementara kode sebelumnya hanya dapat menghapus instans pertama dari nilai yang ditemukan, snippet kode ini akan menemukan dan menghapus semua opsi dari array. Misalnya, jika, katakan, seorang pemain ingin menjual semua roti mereka di toko dalam game.
Gunakan array bernama playerItems dengan setidaknya empat nilai dan set dari duplikat .
local playerItems = {"Potion","Bread","Bread","Sleeping Bag"}Untuk pergi melalui array, buat for loop yang pergi mundur melalui playerItems , dimulai dari #playerItems , dan meningkatkan oleh -1.
for index = #playerItems, 1, -1 doendDalam loop, gunakan if statement untuk memeriksa apakah nilai di dalam playerItems[index] sama dengan "Bread" , dan jika demikian, hapus item.
for index = #playerItems, 1, -1 doif playerItems[index] == "Bread" thentable.remove(playerItems, index)endendGunakan kode di bawah ini untuk menambahkan loop yang mencetak array.
for index = 1, #playerItems dolocal itemString = playerItems[index]print("Index " .. index .. ": " .. itemString)endJalankan script dan periksa bahwa semua nilai bernama "Roti" dihapus.
Sintesis
Nilai dapat dihapus atau ditambahkan ke matriks, tetapi hati-hati dengan indeks bergeser melakukannya. Gunakan loop untuk mengulang melalui tabel untuk menghapus semua instans dari nilai, atau hanya satu instans pertama yang ditemukan.
Kata kunci return dapat digunakan untuk menghentikan loop, dan mengirimkan informasi kembali ke mana perlu.
Versi lengkap dari script dapat diacak di bawah ini.
Proyek berikut mencakup semua script dalam tutorial ini. Unduh di sini .
Catat semua script berada di ServerScriptService dan dinonaktifkan . Untuk menggunakan script, di dalamnya, batalkan pemeriksaan Kebetulangan dan lari Studio.