Tabloları pairs ve ipairs ile Yineleme
pairs() ve ipairs() kullanarak tabloları güvenli şekilde dolaşın.
Tabloları pairs ve ipairs ile Yineleme, CoddyKit'te ücretsiz bir Lua Academy dersidir. Bu, 4 dersinin 3. 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.
ipairs: Sıralı Dizi Dolaşımı
ipairs(t), 1 dizininden başlayan tamsayı dizisi üzerinde dolaşır ve (index, value) çiftlerini üretir. İlk nil değerinde durur. Bu, sıranın önemli olduğu dizi benzeri tablolar için güvenli ve öngörülebilir seçimdir.
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs: Tüm Anahtarlar
pairs(t), tablodaki nil olmayan her anahtar-değer çifti üzerinde belirtilmemiş bir sırada dolaşır. Dahili olarak next() işlevini kullanır. Sözlükler, karma tablolar veya türünden bağımsız olarak tüm anahtarları ziyaret etmeniz gerektiğinde pairs kullanın.
local info = {name="Lua", version=5.4, embedded=true}
for k, v in pairs(info) do
print(k, v)
end
-- name Lua
-- version 5.4
-- embedded true (order may vary)pairs ve ipairs Arasında Seçim
Sıralı diziler için ipairs kullanın (sıra garanti edilir, nil değerinde durur). Sözlükler, karma tablolar veya tüm anahtarlara ihtiyaç duyduğunuz durumlar için pairs kullanın. Bir dizi üzerinde pairs kullanmak işe yarar, ancak sıra garantisi vermez. Bir sözlük üzerinde ipairs kullanmak tamsayı olmayan anahtarları atlar.
local mixed = {10, 20, label="hello", 30}
-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
io.write(v .. " ")
end
print() -- 10 20 30
-- pairs: sees everything
for k, v in pairs(mixed) do
print(k, v)
endÖğeleri Sayma
Diziler için #t sayıyı verir. Sözlükler için #t güvenilir değildir; pairs ile dolaşıp sayımı elle yapın. Bu, karma veya dize anahtarlı tablolarla çalışırken hataları önleyen önemli bir ayrımdır.
local arr = {10, 20, 30}
print("#arr:", #arr) -- 3 (reliable)
local dict = {a=1, b=2, c=3}
print("#dict:", #dict) -- 0 (unreliable for dicts!)
local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count) -- 3Dolaşım Sırasında Değerleri Değiştirme
pairs ile dolaşırken mevcut bir anahtarın değerini güvenle güncelleyebilirsiniz. Ancak dolaşım sırasında anahtar eklemek veya kaldırmak tanımsız davranışa yol açar. Değişiklikleri toplayıp döngüden sonra uygulayın.
local prices = {apple=1.0, banana=0.5, cherry=2.0}
-- Safe: update existing values
for k, v in pairs(prices) do
prices[k] = v * 1.1 -- 10% markup
end
for k, v in pairs(prices) do
print(k, string.format("%.2f", v))
endAnahtarları Toplama
Yaygın bir işlem, belirli bir çıktı elde etmek için tüm anahtarları sıralı bir dizide toplamaktır. Anahtarları toplamak için pairs ile dolaşın, ardından sıralamak için table.sort kullanın.
local config = {host="localhost", port=8080, debug=true}
local keys = {}
for k in pairs(config) do
keys[#keys+1] = k
end
table.sort(keys)
for _, k in ipairs(keys) do
print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080İç İçe Tablalarda Dolaşım
İç içe tablolar (tablolardan oluşan tablo) için iki döngüyü birleştirin: dış döngü üst düzeyde, iç döngü ise her iç içe tabloda dolaşır. Bu örüntü, gerçekten sınırsız iç içelik için özyinelemeyle birlikte her derinliği işler.
local matrix = {
{1,2,3},
{4,5,6},
{7,8,9},
}
for i, row in ipairs(matrix) do
for j, val in ipairs(row) do
io.write(string.format("%3d", val))
end
print()
endipairs ile Filtreleme
ipairs ile dolaşıp bir yüklemeyi geçen öğeleri ekleyerek filtrelenmiş bir liste oluşturun. Sonuç, yalnızca eşleşen öğeleri içeren yeni bir dizidir.
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " ")) -- 2 4 6 8 10ipairs ile Eşleme
Her öğeye bir dönüşüm uygulayın: Dolaşın ve dönüştürülmüş değerlerle yeni bir dizi oluşturun. Bu, Lua'da işlevsel dillerdeki map() karşılığıdır.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do
result[i] = fn(v)
end
return result
end
local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " ")) -- 2 4 6 8 10
local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " ")) -- HELLO WORLDÖzel Dolaşımcılar Üzerinde pairs
Bir işlevden bir dolaşımcı ve durum döndürerek özel bir nesneyi dolaşılabilir hâle getirebilirsiniz. Bu örüntü, pairs işlevinin dahili çalışma biçimini yansıtır: next, t, nil döndürür. Dolaşımcı üreticiniz de benzer şekilde bir işlev ve isteğe bağlı durum döndürür.
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({"x","y","z"}) do
print(v)
end
-- x
-- y
-- zHızlı Kontrol
pairs() ve ipairs() hakkında hangisi doğrudur?
Özet: pairs ve ipairs
Özet:
ipairs: sıralı, 1'den başlayan tamsayı anahtarları; nil değerinde dururpairs: tüm anahtarlar, herhangi bir sıra; erken durmaz- Sözlükler için
pairs, diziler içinipairskullanın - pairs dolaşımı sırasında anahtar eklemeyin/kaldırmayın; mevcut değerleri güncellemek güvenlidir
- Belirli bir çıktı için anahtarları toplayıp sıralayın
Sıkça Sorulan Sorular
“Tabloları pairs ve ipairs ile Yineleme” dersi ücretsiz mi?
Evet — “Tabloları pairs ve ipairs ile Yineleme” 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.
“Tabloları pairs ve ipairs ile Yineleme” dersinde ne öğreneceğim?
pairs() ve ipairs() kullanarak tabloları güvenli şekilde dolaşı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 3. dersidir.
“Tabloları pairs ve ipairs ile Yineleme” 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