Signature Indeks
Termasuk bagian Pengantar Luau dalam perjalanan Lua di Coddy. Pelajaran 72 dari 73.
Kamu sudah mengenal tipe map seperti {[string]: number} di bab tabel: index signature: setiap kunci string memetakan ke nilai number. Tipe ini sangat berguna saat kuncinya belum diketahui ketika kamu menulis kode: penghitung, pengaturan, cache, skor, apa pun yang dibuat saat program berjalan.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- kunci string apa pun diperbolehkan
counts["sword"] = 1
counts["potion"] += 1 -- nilai diperiksa sebagai angkaAda dua fakta tentang runtime yang penting saat bekerja dengan map. Pertama, membaca kunci yang belum pernah ditetapkan akan menghasilkan nil: pola penghitungan klasik menangani hal ini dengan or, yang mengubah nilai "missing" menjadi 0:
counts[item] = (counts[item] or 0) + 1Kedua, pairs() mengiterasi kunci map tanpa urutan yang dijamin: menjalankan program yang sama dua kali bisa mengunjungi kunci dengan urutan berbeda. Jika output harus dapat diprediksi, kumpulkan kuncinya ke dalam array, urutkan dengan table.sort, lalu iterasi array yang sudah diurutkan:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endTantangan
MudahHitung item jarahan dengan map bertipe.
- Deklarasikan
type Counts = {[string]: number}. - Tulis
countItems(items: {string}): Countsyang membuat mapCountsbaru dan menghitung berapa kali setiap string muncul (gunakan pola(counts[item] or 0) + 1). - Buat
local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"}lalu hitung isinya. - Cetak satu baris
[name]: [count]untuk setiap item yang berbeda, dalam urutan alfabetis: kumpulkan kuncinya, urutkan dengantable.sort, lalu cetak.
Output yang diharapkan:
potion: 3
shield: 1
sword: 2Coba sendiri
-- Tulis kodemu di sini
-- 1) type Counts = {[string]: number}
-- 2) Buat countItems(items: {string}): Counts menggunakan (counts[item] or 0) + 1
-- 3) Hitung isi array loot dari tugas
-- 4) Kumpulkan key, urutkan dengan table.sort, lalu cetak baris `{name}: {count}`
Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Pengantar Luau
1Memulai dengan Luau
Apa Itu Luau?Mengapa Menggunakan Luau?Kode Luau PertamamuPemeriksaan Tipe dan Mode ErrorRangkuman: Pengenalan Luau4Bekerja dengan Fungsi
Menentukan Tipe Parameter dan Nilai KembalianMenentukan Tipe Fungsi AnonimFungsi yang Tidak Mengembalikan NilaiParameter OpsionalNilai Default ParameterFungsi VariadikMendefinisikan Tipe FungsiRangkuman: Fungsi Bertipe2Tipe Inti
Tipe Dasar: num, str, boolTipe 'any': Jalan Keluar DaruratTipe 'unknown'Nil & Tipe OpsionalInferensi Tipe dalam PraktikAnotasi Tipe EksplisitUlasan: Latihan Tipe Inti5Alias, Union, dan Intersection
Alias Tipe untuk Tipe PrimitifTipe UnionMenggunakan Tipe UnionTipe LiteralTipe IntersectionMenggabungkan Alias TipeRekap: Kombinasi Tipe Lanjutan8Enum, Cara Luau
Pola Enum di LuauEnum Numerik dengan TabelEnum String sebagai UnionMenggunakan Enum Union LiteralMembekukan Tabel KonstantaUlasan: Enum, Cara Luau11Topik Lanjutan
Assertion TipePenjaga Tipe dengan typeofTipe neverKeamanan Nil dalam Mode StrictSignature IndeksRangkuman: Menyempurnakan Tipe3Tabel Bertipe: array dan Map
array BertipeMenambahkan dan Membaca ElemenApa Itu Tipe Map?Mendeklarasikan dan Mengakses MapMelakukan Iterasi pada TabelTabel dengan Bentuk Campuranarray Bertipe Multidimensitable.unpack dan VarargsRingkasan: array dan MapLatihan sendiri: Compiler Luau online