Menu
Coddy logo textTech

Dizin İmzaları (Index Signatures)

Coddy'nin Lua Journey'sinin Luau'ya Giriş bölümünün bir parçası. Ders 72 / 73.

Tablolar bölümünde {[string]: number} gibi map türleriyle karşılaşmıştın: bir indeks imzası: herhangi bir dize anahtarı bir sayı değerine eşlenir. Anahtarlar kodu yazarken bilinmediğinde çok kullanışlıdırlar: sayaçlar, ayarlar, önbellekler, puanlar; çalışma zamanında oluşturulan her şey.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- herhangi bir string anahtara izin verilir
counts["sword"] = 1
counts["potion"] += 1  -- değerler sayılar olarak kontrol edilir

Map'lerle çalışırken iki çalışma zamanı bilgisi önemlidir. İlk olarak, hiç ayarlanmamış bir anahtarı okumak nil döndürür: klasik sayma deseni bunu or ile ele alır ve "missing" değerini 0'a dönüştürür:

counts[item] = (counts[item] or 0) + 1

İkinci olarak, pairs() bir map'in anahtarları üzerinde garanti edilmiş bir sıra olmadan gezinir: aynı programı iki kez çalıştırmak, anahtarları farklı sırada ziyaret edebilir. Çıktının öngörülebilir olması gerektiğinde anahtarları bir diziye topla, table.sort ile sırala ve bunun yerine sıralanmış dizi üzerinde gezin:

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]}`)
end
challenge icon

Görev

Kolay

Tür belirtilmiş bir map ile ganimet düşüşlerini sayın.

  • type Counts = {[string]: number} tanımlayın.
  • Her dizede kaç kez göründüğünü sayarak yeni bir countItems(items: {string}): Counts map'i oluşturan Counts yazın ((counts[item] or 0) + 1 kalıbını kullanın).
  • local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"} oluşturun ve bunu sayın.
  • Her farklı öğe için, alfabetik sırayla bir [name]: [count] satırı yazdırın: anahtarları toplayın, table.sort ile sıralayın, ardından yazdırın.

Beklenen çıktı:

potion: 3
shield: 1
sword: 2

Kendin dene

-- Kodu buraya yaz
-- 1) type Counts = {[string]: number}
-- 2) countItems(items: {string}): Counts kullanarak (counts[item] or 0) + 1
-- 3) görevdeki loot dizisini say
-- 4) anahtarları topla, table.sort ile sırala, `{name}: {count}` satırlarını yazdır
quiz iconKendini test et

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

Luau'ya Giriş bölümündeki tüm dersler

Kendi başına pratik yap: Online Lua derleyicisi