Kamus adalah tabel yang mengaitkan nama atau kunci dengan suatu nilai, bukan dengan indeks.
Contoh:
Sintaks kamus Luaulocal pet = {Name = "Bobbie",Type = "Dog",}
Gunakan kamus ketika Anda perlu memberi label pada nilai, bukan hanya menyusunnya dalam urutan seperti yang dilakukan array. Latihan menggunakan kamus dalam tutorial ini dengan memanipulasi nilai yang terkait dengan seorang pemain.
Sintaks kamus
Seperti array, kamus ditugaskan ke sebuah variabel dengan kurung kurawal {}. Pasangan kunci-nilai disimpan pada baris terpisah diikuti dengan koma. Kunci dan nilai dapat berupa jenis data apapun, termasuk string, angka, dan nama variabel.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Untuk merujuk bagian atau objek lain sebagai kunci, gunakan tanda kurung.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Membuat kamus
Salah satu penggunaan sehari-hari kamus adalah mengorganisir informasi pemain atau karakter. Langkah-langkah berikut menjelaskan bagaimana informasi karakter musuh teoretis dapat disimpan dan diakses.
Dalam skrip baru, buat kamus bernama enemy.
local enemy = {}Kunci pertama dalam kamus akan melacak nama musuh dengan sebuah variabel yang disebut Name.
local enemy = {Name}Tetapkan nama musuh ke kunci tersebut, diikuti dengan koma.
local enemy = {Name = "Spike",}Tambahkan pasangan kunci-nilai kedua untuk seberapa banyak kesehatan yang harus dimiliki musuh. Ingat, kunci harus selalu menggunakan tipe data yang sama, tetapi nilai tidak harus.
local enemy = {Name = "Spike",Health = 1000,}
Menggunakan nilai kamus
Ada dua cara untuk mengakses nilai kamus:
- tableName["keyName"] (yang penting, perhatikan tanda kutip)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("Penjahat " .. enemy["Name"] .. " mendekat!")print("Penjahat " .. enemy.Name .. " mendekat!")
Gaya mana yang digunakan biasanya tergantung pada tujuan tabel. Untuk tabel yang menyimpan koleksi nilai seperti daftar pemain di server, programmer biasanya akan menggunakan tableName["keyName"]. Untuk kamus yang digunakan untuk menjelaskan sebuah objek, programmer lebih mungkin menggunakan tableName.keyName.
Mengubah nilai kamus
Mengubah nilai kunci sama dengan variabel lain; gunakan operator sama dengan =.
Di bawah tabel enemy, atur nama musuh menjadi sesuatu yang lain.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("Nama musuh adalah " .. enemy.Name)Uji permainan dan periksa jendela Output.
Variabel yang sudah ada sebagai kunci
Kamus dapat berinteraksi dengan variabel yang sudah ada yang dinyatakan di bagian lain dari skrip. Contoh kode berikut menggunakan variabel untuk menambahkan nama pemain sebagai kunci saat mereka bergabung dengan pengalaman dan kemudian mengatur nilai poin mereka menjadi 0.
Di ServerScriptService, buat skrip baru bernama PlayerPoints. Di dalam skrip, ambil Layanan Players dan buat kamus kosong bernama playerPoints.
local Players = game:GetService("Players")local playerPoints = {}Kode fungsi lokal untuk mengatur poin pemain dengan parameter untuk variabel pemain baru. Hubungkan fungsi ke acara Players.PlayerAdded.
local playerPoints = {}local function setPoints(newPlayer)endPlayers.PlayerAdded:Connect(setPoints)Dalam fungsi, tambahkan variabel untuk mendapatkan Name pemain, sebuah properti di setiap objek Player, dan sebuah pernyataan print untuk pengujian.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("halo " .. name)endMasukkan name ke dalam kamus playerPoints sebagai kunci, dan atur nilai, poin pemain, menjadi 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("halo " .. name)playerPoints[name] = 0endGunakan name untuk mencetak nama pemain dan playerPoints[name] untuk mencetak nilai kunci yang cocok dengan variabel tersebut.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("halo " .. name)playerPoints[name] = 0print(name .. " memiliki " .. playerPoints[name] .. " poin.")endJalankan proyek dan amati outputnya.
Skrip selesai
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("halo " .. name)
playerPoints[name] = 0
print(name .. " memiliki " .. playerPoints[name] .. " poin.")
end
Players.PlayerAdded:Connect(setPoints)
Tantangan opsional
Berikut adalah beberapa tantangan yang berlaku untuk menggunakan kamus dengan cara yang berbeda. Lihat apakah Anda dapat membangun kode untuk ini.
- Buat bagian jebakan yang memberikan kerusakan seiring waktu kepada pemain. Setelah pemain menyentuh jebakan, berikan kerusakan pada mereka, tunggu, lalu izinkan mereka untuk terkena kerusakan lagi.
- Buat fungsi yang memeriksa pemain mana dari dua pemain yang memiliki poin terbanyak dengan mengakses sebuah kamus.
- Buat sebuah cipher, sebuah sistem untuk menukar satu string dengan yang lain untuk membuat kode "rahasia". Misalnya, huruf "A" dapat ditukar dengan "G," atau kata "apel" dapat ditukar dengan "jeruk."
Kamus dan pairs()
pairs() adalah sebuah fungsi yang sering digunakan untuk mengiterasi kamus. Contoh terlihat di bawah ini.
local myDictionary = {["Pemain Biru"] = "Ana",["Pemain Emas"] = "Binh",["Pemain Merah"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " adalah " .. value)end
pairs() dapat digunakan untuk bekerja dengan kunci elemen kamus, nilai, atau keduanya. Dalam loop for di bawah ini, variabel pertama adalah kunci. Variabel kedua adalah nilai. Kamus yang ingin Anda kerjakan diberikan ke pairs().
local inventory = {["Bricks Emas"] = 43,Carrots = 3,Torches = 2,}print("Anda memiliki:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Ketika dijalankan, kode akan mencetak yang berikut:
Anda memiliki:43 Bricks Emas3 Carrots2 Torches
Ringkasan
Kamus adalah tabel yang menggunakan pasangan kunci-nilai alih-alih nilai terindeks. Kamus dan array dimulai dengan cara yang serupa dengan menetapkan kurung kurawal pada sebuah variabel. Jaga agar entri dipisahkan dengan koma.
Semua kunci dalam kamus harus menggunakan tipe data yang sama, tetapi nilai dapat mencampur tipe data tanpa masalah.
Cara di mana kamus diakses dapat menyampaikan tujuannya. Kamus properti musuh kemungkinan akan diakses dengan operator titik, sementara daftar nama kemungkinan akan menggunakan tableName[keyName].
Saat menggunakan tanda kurung, berhati-hatilah; nama kunci yang dibuat dalam tabel harus diperlakukan sebagai string: tableName["keyName"]. Namun, saat merujuk objek seperti bagian, tanda kutip tidak diperlukan: tableName[keyName].
Banyak skrip perlu melalui kamus atau array, tetapi Anda mungkin tidak selalu tahu awal dan akhir dari struktur data ini. Misalnya, sebuah kamus pemain mungkin berubah, atau pemain mungkin memiliki inventaris array dengan ukuran yang bervariasi.
Dalam situasi ini, Anda dapat menggunakan pairs() dan ipairs() dalam loop for untuk melalui setiap elemen tanpa titik awal dan akhir yang diketahui. Anda juga dapat menggunakan iterasi umum melalui kata kunci in untuk melintasi elemen tanpa perlu pairs() atau ipairs().