Diziler Olarak Tablolar
table.insert ve table.remove ile 1 tabanlı diziler oluşturun ve işleyin.
Diziler Olarak Tablolar, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 1. 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.
1 Tabanlı Diziler
Lua dizileri, 1'den başlayan ardışık tam sayı anahtarlarına sahip tablolardır. Bu, 0'dan başlayan çoğu dilden farklıdır. Lua'da bu kural evrenseldir — standart kitaplıktaki tüm fonksiyonlar 1 tabanlı indislemeyi varsayar. Sınır dışı erişim hata yerine nil döndürür.
local colors = {"red", "green", "blue"}
print(colors[1]) -- red
print(colors[2]) -- green
print(colors[3]) -- blue
print(colors[0]) -- nil (no index 0)
print(#colors) -- 3 (length operator)table.insert ve table.remove
table.insert(t, val) sona ekler. table.insert(t, pos, val) bir konuma ekleme yapar ve öğeleri sağa kaydırır. table.remove(t, pos), pos konumundaki öğeyi (varsayılan: son öğe) kaldırır, öğeleri sola kaydırır ve kaldırılan değeri döndürür.
local stack = {}
table.insert(stack, "first")
table.insert(stack, "second")
table.insert(stack, "third")
print(#stack) -- 3
table.insert(stack, 2, "inserted")
print(stack[2]) -- inserted
local removed = table.remove(stack, 1)
print(removed) -- first
print(stack[1]) -- insertedTablolarla Yığın
Lua tablosu kusursuz bir yığın oluşturur. Yığına eklemek için table.insert, yığından çıkarmak için table.remove kullanın. Her iki işlem de varsayılan olarak tablonun sonundan çalışır ve itfa edilmiş O(1) zaman sağlar.
local stack = {}
-- Push
table.insert(stack, 10)
table.insert(stack, 20)
table.insert(stack, 30)
-- Pop
print(table.remove(stack)) -- 30
print(table.remove(stack)) -- 20
print(#stack) -- 1Tablolarla Kuyruk
Bir kuyruk (FIFO) tabloyla uygulanabilir; ancak table.remove(t, 1), tüm öğeleri kaydırdığı için O(n) maliyetlidir. Yüksek performanslı kuyruklar için kaydırmayı önlemek üzere iki işaretçi (baş ve kuyruk indisleri) kullanın.
local head, tail = 1, 0
local queue = {}
local function enqueue(v)
tail = tail + 1
queue[tail] = v
end
local function dequeue()
if head > tail then return nil end
local v = queue[head]
queue[head] = nil
head = head + 1
return v
end
enqueue("a"); enqueue("b"); enqueue("c")
print(dequeue()) -- a
print(dequeue()) -- b# Uzunluk Operatörü
# operatörü, bir tablonun "sınırını" döndürür: t[i] ~= nil ve t[i+1] == nil koşullarını sağlayan bir i indisi. Boşluk içermeyen dizilerde bu değer dizi uzunluğuna eşittir. Ortasında boşluklar (nil değerleri) bulunan dizilerde # tanımsız sonuçlar verir — bunun yerine table.pack kullanın veya uzunluğu elle izleyin.
local t = {10, 20, 30, 40, 50}
print(#t) -- 5
-- Safe for dense arrays
for i = #t, 1, -1 do
io.write(t[i] .. " ")
end
print() -- 50 40 30 20 10Dizileri Dilimleme
Lua'da yerleşik dilimleme işlemi yoktur; ancak table.move (Lua 5.3+) veya elle yazılmış bir döngüyle bir alt dizi çıkarabilirsiniz. table.move(a1, f, e, t, a2), a1[f..e] aralığındaki öğeleri t konumundan başlayarak a2 tablosuna kopyalar.
local src = {10,20,30,40,50,60}
-- Manual slice
local function slice(t, from, to)
local result = {}
for i = from, to do
result[#result+1] = t[i]
end
return result
end
local sub = slice(src, 2, 4)
print(sub[1], sub[2], sub[3]) -- 20 30 40Diziyi Ters Çevirme
Her iki uçtaki öğeleri ortaya doğru birbirleriyle değiştirerek bir tabloyu yerinde tersine çevirin. Bu, ek bellek kullanmadan herhangi bir Lua dizisi üzerinde çalışan klasik bir algoritmadır.
local function reverse(t)
local n = #t
for i = 1, math.floor(n / 2) do
t[i], t[n - i + 1] = t[n - i + 1], t[i]
end
end
local arr = {1, 2, 3, 4, 5}
reverse(arr)
for _, v in ipairs(arr) do
io.write(v .. " ")
end
print() -- 5 4 3 2 1Dizileri Birleştirme
İki diziyi tek bir dizide birleştirmek için ikinci dizi üzerinde döngü kurup öğelerini sona ekleyin. table.move, bunu Lua 5.3 ve sonraki sürümlerde verimli biçimde yapar. Sonuç, her iki dizinin tüm öğelerini sıralarını koruyarak içeren yeni bir tablodur.
local function concat(a, b)
local result = {}
for _, v in ipairs(a) do result[#result+1] = v end
for _, v in ipairs(b) do result[#result+1] = v end
return result
end
local merged = concat({1,2,3}, {4,5,6})
for i, v in ipairs(merged) do
io.write(v .. " ")
end
print() -- 1 2 3 4 5 6İç İçe Dizileri Düzleştirme
İç içe bir diziyi özyinelemeli olarak düzleştirin: Bir öğe tabloysa onun üzerinde özyinelemeli olarak çalışın; değilse öğeyi sonuca ekleyin. Bu, özyinelemeli tablo dolaşımının doğal bir uygulamasıdır.
local function flatten(t, result)
result = result or {}
for _, v in ipairs(t) do
if type(v) == "table" then
flatten(v, result)
else
result[#result+1] = v
end
end
return result
end
local nested = {1, {2, 3}, {4, {5, 6}}, 7}
local flat = flatten(nested)
print(table.concat(flat, ", ")) -- 1, 2, 3, 4, 5, 6, 7Küme Olarak Dizi
Değerlerin anahtar, karşılık gelen değerin ise true olduğu bir tablo kullanarak küme uygulayabilirsiniz. Küme üyeliği denetimi O(1) sürede yapılır. Bir diziden küme oluşturmak, yinelenen öğeleri kaldırır. pairs ile dolaşarak yeniden diziye dönüştürebilirsiniz.
local function toSet(arr)
local set = {}
for _, v in ipairs(arr) do set[v] = true end
return set
end
local nums = {3,1,4,1,5,9,2,6,5,3}
local set = toSet(nums)
local unique = {}
for k in pairs(set) do unique[#unique+1] = k end
table.sort(unique)
print(table.concat(unique, " ")) -- 1 2 3 4 5 6 9Hızlı Kontrol
Yalnızca bir bağımsız değişkenle çağrıldığında table.remove(t) ne yapar?
Özet: Dizi Olarak Tablolar
Özet:
- Lua dizileri 1'den başlayan tablolardır
- Yığına ekleme ve yığından çıkarma için
table.insert/table.remove #t, boşluk içermeyen dizilerin uzunluğunu verir- Yığın: sondan ekleme/çıkarma (O(1))
- Kuyruk: O(n) kaydırmadan kaçınmak için baş+son işaretçilerini kullanın
- O(1) üyelik denetimleri için tabloyu küme olarak kullanın
Yapay zeka eğitmeniyle Lua öğren — ücretsiz
Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.
- Kurslar
- 40
- Dersler
- 159
Sıkça Sorulan Sorular
“Diziler Olarak Tablolar” dersi ücretsiz mi?
Evet — “Diziler 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.
“Diziler Olarak Tablolar” dersinde ne öğreneceğim?
table.insert ve table.remove ile 1 tabanlı diziler oluşturun ve işleyin. 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 1. dersidir.
“Diziler 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