0Pricing
Lua Academy · Ders

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  cherry

pairs: 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)       -- 3

Dolaşı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))
end

Anahtarları 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()
end

ipairs 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 10

ipairs 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
-- z

Hı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 durur
  • pairs: tüm anahtarlar, herhangi bir sıra; erken durmaz
  • Sözlükler için pairs, diziler için ipairs kullanı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

  1. Diziler Olarak Tablolar
  2. Sözlükler Olarak Tablolar
  3. Tabloları pairs ve ipairs ile Yineleme
  4. İç İçe Tablolar ve Yapılandırılmış Veriler
← Lua Academy Sayfasına Dön