Sözlükler Olarak Tablolar
Anahtar-değer çiftlerini depolamak için dize ve karma anahtarlar kullanın.
Sözlükler Olarak Tablolar, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Lua Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Lua Academy kursu toplamda 4 dersten oluşur.
Dize Anahtarları
Dize anahtarları içeren tablolar sözlükler (karma tabloları) gibi davranır. Alanlara, geçerli tanımlayıcılar için nokta gösterimiyle t.key veya herhangi bir dize için köşeli parantez gösterimiyle t["key"] kullanarak erişin. Her iki biçim de eşdeğerdir; köşeli parantez gösterimi dinamik anahtarları destekler.
local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"
print(user.name) -- Alice
print(user["age"]) -- 30
local field = "role"
print(user[field]) -- admin (dynamic key)Tablo Değişmezleri
Sözlükler, key = value söz dizimini kullanan bir tablo değişmeziyle başlatılabilir. Lua'da kayıt oluşturmanın en yaygın yolu budur. Tek bir değişmez içinde dizi tarzı ve sözlük tarzı girdileri birlikte kullanabilirsiniz.
local config = {
host = "localhost",
port = 3306,
database = "myapp",
debug = false,
tags = {"web", "api"}, -- nested array
}
print(config.host) -- localhost
print(config.port) -- 3306
print(config.tags[1]) -- webSözlüklerle Sayma
Sözlüklerin klasik kullanım alanlarından biri sıklık sayımıdır. Bir listenin üzerinde dolaşarak her öğeyi anahtar olarak kullanın ve sayacı artırın. Artırmadan önce nil olup olmadığını denetleyin; başlangıç değeri olarak count[word] or 0 kullanın.
local words = {"lua","is","fast","lua","is","lua"}
local freq = {}
for _, w in ipairs(words) do
freq[w] = (freq[w] or 0) + 1
end
for word, count in pairs(freq) do
print(word, count)
end
-- lua 3, is 2, fast 1Sözlüklerle Gruplama
Verileri bir özelliğe göre gruplayın: Listenin üzerinde dolaşın ve gruplama anahtarını kullanarak öğeleri sözlükteki bir listeye ekleyin. Bu, Lua'daki SQL GROUP BY veya Python'daki defaultdict örüntüsünün karşılığıdır.
local people = {
{name="Alice", dept="eng"},
{name="Bob", dept="hr"},
{name="Carol", dept="eng"},
{name="Dave", dept="hr"},
}
local groups = {}
for _, p in ipairs(people) do
local d = p.dept
groups[d] = groups[d] or {}
groups[d][#groups[d]+1] = p.name
end
print(table.concat(groups.eng, ", ")) -- Alice, CarolAnahtarın Var Olup Olmadığını Denetleme
Bir anahtarın var olup olmadığını, değerini nil ile karşılaştırarak sınayın. Dikkatli olun: Bir anahtarda depolanan değer nil ise anahtar yok kabul edilir. Varlık göstergeleri için değer olarak nil yerine true depolayın.
local cache = {result=42, mode="fast"}
if cache.result ~= nil then
print("cached:", cache.result) -- 42
end
-- Key not present:
if cache.timeout == nil then
print("no timeout set")
end
-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
print("access granted")
endAnahtarları Silme
Bir tablo anahtarını kaldırmak için onu nil olarak ayarlayın. Anahtar-değer çifti ortadan kalkar ve çöp toplayıcı değerin belleğini geri alabilir. Yerel bir değişkeni bu şekilde silemezsiniz; yalnızca tablo girdileri silinebilir.
local session = {token="abc123", user="Alice", expires=3600}
print(session.token) -- abc123
session.token = nil
print(session.token) -- nil (removed)
-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count) -- 2Sözlükleri Birleştirme
Bir tablonun üzerinde dolaşıp girdilerini diğerine kopyalayarak iki tabloyu birleştirin. Her ikisinde de aynı anahtar varsa ikinci tablonun değeri geçerli olur. Bu, Lua'da JavaScript'in Object.assign karşılığıdır.
local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}
local function merge(base, over)
local result = {}
for k, v in pairs(base) do result[k] = v end
for k, v in pairs(over) do result[k] = v end
return result
end
local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic) -- red 12 trueHer Türden Anahtar
Tablo anahtarları, nil veya NaN olmayan her türden değer olabilir: dizeler, sayılar, boolean değerler, işlevler ve hatta diğer tablolar. Tamsayı anahtarları ile dize anahtarları dahili olarak farklı depolanır, ancak ikisine de köşeli parantez gösterimiyle aynı şekilde erişilir.
local t = {}
local function myKey() end
t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4
print(t["string"]) -- 1
print(t[42]) -- 2
print(t[true]) -- 3
print(t[myKey]) -- 4Sıralı Dolaşım
Lua'daki pairs() dolaşım sırasını garanti etmez. Belirli bir sırada dolaşmak için anahtarları bir dizide toplayın, diziyi sıralayın ve ardından üzerinde dolaşın.
local scores = {Alice=95, Bob=87, Carol=91, Dave=78}
local names = {}
for name in pairs(scores) do
names[#names+1] = name
end
table.sort(names)
for _, name in ipairs(names) do
print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)Varsayılan Değer Örüntüsü
Yararlı bir örüntü, __index üst tablosu aracılığıyla erişilen bir "defaults" tablosu kullanmaktır. Ana tablo içinde bir anahtar bulunamadığında Lua, anahtarı varsayılanlar tablosunda arar. Bu, birleştirme yapmadan katmanlı yapılandırma olanağı sağlar.
local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}
setmetatable(config, {__index = defaults})
print(config.timeout) -- 60 (overridden)
print(config.retries) -- 3 (from defaults)
print(config.verbose) -- false (from defaults)Hızlı Kontrol
Lua'da t tablosundan "x" anahtarını nasıl kaldırırsınız?
Özet: Sözlük Olarak Tablolar
Temel noktalar:
- Nokta ve köşeli parantez gösterimi:
t.key==t["key"] - Nil veya NaN olmayan her değer anahtar olabilir
- Bir anahtarı silmek için değerini nil olarak ayarlayın
- Sıklık sayımı:
t[k] = (t[k] or 0) + 1 - Sıralı dolaşım: anahtarları toplayın → sıralayın → dolaşın
- Varsayılan değerler için __index üst tablosunu kullanın
Sıkça Sorulan Sorular
“Sözlükler Olarak Tablolar” dersi ücretsiz mi?
Evet — “Sözlükler Olarak Tablolar” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Lua Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Lua Academy kursu toplamda 4 dersten oluşur.
“Sözlükler Olarak Tablolar” dersinde ne öğreneceğim?
Anahtar-değer çiftlerini depolamak için dize ve karma anahtarlar kullanın. Lua Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.
Lua Academy öğrenmeye başlamak için deneyim gerekli mi?
Önceden deneyim gerekmez. CoddyKit'te Lua Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.
“Sözlükler Olarak Tablolar” dersi ne kadar sürer?
Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.
Bu Lua Academy dersinde kod yazıp çalıştırabilir miyim?
Evet. Her Lua Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.
Bu kursun tüm dersleri
- Diziler Olarak Tablolar
- Sözlükler Olarak Tablolar
- Tabloları pairs ve ipairs ile Yineleme
- İç İçe Tablolar ve Yapılandırılmış Veriler