Kamus adalah tabel yang menghubungkan nama atau kunci dengan nilai bukan indeks.
Contoh:
Syntax kamus Luau
local pet = {Name = "Bobbie",Type = "Dog",}
Gunakan kamus saat Anda perlu menandai nilai, bukan hanya mencantumkann mereka dalam urutan seperti yang dilakukan array.Berlatih menggunakan kamus dalam tutorial ini dengan memanipulasi nilai yang terkait dengan pemain.
Syntax kamus
Seperti array, kamus ditugaskan ke variabel dengan kurungan gulungan {} . Pas kunci-nilai disimpan pada baris terpisah diikuti oleh koma.Kunci dan nilai dapat menjadi semua ketikdata, termasuk string, angka, dan nama variabel.
local playerNames = {player1 = "Zap",player2 = "Kel",}print(playerNames["player1"])
Untuk merujuk bagian atau objek terinstansi lain sebagai kunci, gunakan kurung.
local greenPart = workspace.GreenPartlocal redPart = workspace.RedPartlocal partList = {[greenPart] = true,[redPart] = false,}print(partList[redPart])
Buat kamus
Satu penggunaan sehari-hari dari kamus adalah mengatur informasi pemain atau karakter.Langkah-langkah ini menjelaskan bagaimana informasi karakter musuh teoritis dapat disimpan dan diakses.
Dalam skrip baru, buat kamus bernama enemy .
local enemy = {}Kunci pertama di kamus akan melacak nama musuh dengan variabel yang disebut Name .
local enemy = {Name}Ambil nama musuh untuk unit, diikuti oleh koma.
local enemy = {Name = "Spike",}Tambahkan pas kunci-nilai kedua untuk berapa banyak kesehatan yang harus dimiliki musuh. Ingat, kunci harus selalu menggunakan ketikdata yang sama, tetapi nilai tidak harus.
local enemy = {Name = "Spike",Health = 1000,}
Gunakan nilai kamus
Ada dua cara untuk mengakses nilai kamus:
- tableName["keyName"] (penting, perhatikan kutipan)
- tableName.keyName
local enemy = {Name = "Spike",Health = 1000,}print("The villain " .. enemy["Name"] .. " approaches!")print("The villain " .. enemy.Name .. " approaches!")
Gaya mana yang harus digunakan biasanya tergantung pada tujuan tabel.Untuk tabel yang menyimpan koleksi nilai seperti daftar pemain di server, pemrogram akan biasanya menggunakan tableName["keyName"] .Untuk kamus yang digunakan untuk menggambarkan objek, pengkode lebih mungkin menggunakan tableName.keyName .
Ubah nilai kamus
Mengubah nilai kunci sama dengan unitlain; gunakan operator sama =.
Di bawah tabel enemy, atur nama musuh ke sesuatu yang lain.
local enemy = {Name = "Spike",Health = 1000,}enemy.Name = "Rana"print("The enemy's name is " .. enemy.Name)Tes uji dan periksa jendela Output.
Variabel pra-ekisting sebagai kunci
Kamus dapat berinteraksi dengan variabel pra-ekisting yang dideklarasikan 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 dengan nama PlayerPoints.Dalam skrip, dapatkan Layanan Pemain 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, properti di setiap objek Pemain , dan pernyataan cetak untuk pengujian.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)endMasukkan name ke dalam kamus playerPoints sebagai unit, dan atur nilainya, poin pemain, menjadi 0.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0endGunakan name untuk mencetak nama pemain dan playerPoints[name] untuk mencetak nilai kunci yang cocok dengan variabel.
local function setPoints(newPlayer)local name = newPlayer.Nameprint("hello " .. name)playerPoints[name] = 0print(name .. " has " .. playerPoints[name] .. " points.")endJalankan proyek dan amati outputnya.
Skrip selesai
local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)
Tantangan opsional
Di bawah ini adalah beberapa tantangan yang berlaku untuk menggunakan kamus dengan cara yang berbeda. Lihat apakah Anda dapat membuat kode untuk ini.
- Buat bagian perangkap yang melakukan kerusakan dari waktu ke waktu pada pemain. Setelah seorang pemain menyentuh perangkap, merusak mereka, tunggu, lalu izinkan mereka dirusak lagi.
- Buat fungsi yang memeriksa mana dari dua pemain yang memiliki poin paling banyak dengan mengakses kamus.
- Buat kode, sistem pertukaran satu string untuk yang lain untuk membuat kode "rahasia".Sebagai contoh, huruf "A" dapat dipertukarkan dengan "G," atau kata "apel" dapat dipertukarkan dengan "oranye."
Kamus dan pasangan()
pairs() adalah fungsi yang sering digunakan untuk mengulang melalui kamus . Sebuah contoh dapat dilihat di bawah ini.
local myDictionary = {["Blue Player"] = "Ana",["Gold Player"] = "Binh",["Red Player"] = "Cate",}for key, value in pairs(myDictionary) doprint(key .. " is " .. value)end
pairs() dapat digunakan untuk bekerja dengan unit, nilai, atau keduanya elemen kamus.Dalam loop for di bawah ini, variabel pertama adalah unit.Variabel kedua adalah nilainya.Kamus yang ingin Anda gunakan diserahkan ke pairs() .
local inventory = {["Gold Bricks"] = 43,Carrots = 3,Torches = 2,}print("You have:")for itemName, itemValue in pairs(inventory) doprint(itemValue, itemName)end
Saat dieksekusi, kode akan mencetak mengikuti:
You have:43 Gold Bricks3 Carrots2 Torches
Singkatan
Kamus adalah tabel yang menggunakan pasangan kunci-nilai alih-alih nilai indeks.Kamus dan array dimulai dengan cara yang sama dengan menugaskan kurungan bergelombang ke variabel.Pertahankan entri terpisah dengan koma.
Semua kunci dalam kamus harus menggunakan ketikdata yang sama, tetapi nilai dapat mencampur jenis data tanpa masalah.
Cara di mana kamus diakses dapat mengungkapkan tujuannya.Kamus properti musuh kemungkinan akan diakses dengan operator dot, sementara daftar nama kemungkinan akan menggunakan tableName[keyName].
Saat menggunakan kurung, berhati-hatilah; nama kunci yang dibuat dalam tabel harus diperlakukan sebagai string: tableName["keyName"] .Namun, saat merujuk pada objek seperti bagian, kutipan tidak diperlukan: tableName[keyName] .
Banyak skrip perlu melalui kamus atau array, tetapi Anda mungkin tidak selalu tahu awal dan akhir struktur data ini.Sebagai contoh, kamus pemain mungkin berubah, atau pemain mungkin memiliki inventaris array berukuran bervariasi.
Dalam situasi ini, Anda dapat menggunakan pairs() dan ipairs() dalam loop for untuk melalui setiap elemen tanpa titik awal dan akhir yang dikenalAnda juga dapat menggunakan iterasi umum melalui kata kunci in untuk melingkar melalui elemen tanpa perlu pairs() atau ipairs() .