0Pricing
Lua Academy · Pelajaran

Melakukan Iterasi pada Tabel dengan pairs dan ipairs

Telusuri tabel dengan aman menggunakan pairs() dan ipairs().

Melakukan Iterasi pada Tabel dengan pairs dan ipairs adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 3 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

ipairs: Iterasi Larik Berurutan

ipairs(t) melakukan iterasi pada urutan bilangan bulat yang dimulai dari indeks 1 dan menghasilkan pasangan (index, value). Iterasi berhenti pada nil pertama. Ini adalah pilihan yang aman dan dapat diprediksi untuk tabel yang menyerupai larik dan mementingkan urutan.

local fruits = {"apple","banana","cherry"}

for i, fruit in ipairs(fruits) do
  print(i, fruit)
end
-- 1  apple
-- 2  banana
-- 3  cherry

pairs: Semua Kunci

pairs(t) melakukan iterasi pada setiap pasangan kunci-nilai yang bukan nil dalam tabel, dalam urutan yang tidak ditentukan. Secara internal, fungsi ini menggunakan fungsi next(). Gunakan pairs untuk kamus, tabel campuran, atau saat Anda perlu mengunjungi semua kunci apa pun jenisnya.

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)

Memilih antara pairs dan ipairs

Gunakan ipairs untuk larik berurutan (urutan terjamin, berhenti pada nil). Gunakan pairs untuk kamus, tabel campuran, atau saat Anda memerlukan semua kunci. Menggunakan pairs pada larik dapat dilakukan, tetapi tidak menjamin urutan. Menggunakan ipairs pada kamus akan melewatkan kunci yang bukan bilangan bulat.

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

Menghitung Elemen

Untuk urutan, #t memberikan jumlah elemen. Untuk kamus, #t tidak dapat diandalkan — lakukan iterasi dengan pairs dan hitung secara manual. Ini adalah perbedaan penting yang mencegah galat saat bekerja dengan tabel campuran atau tabel berkunci string.

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

Mengubah Nilai selama Iterasi

Anda dapat dengan aman memperbarui nilai kunci yang sudah ada saat melakukan iterasi dengan pairs. Namun, menambahkan atau menghapus kunci selama iterasi memiliki perilaku yang tidak ditentukan. Kumpulkan perubahan, lalu terapkan setelah perulangan selesai.

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

Mengumpulkan Kunci

Operasi yang umum dilakukan adalah mengumpulkan semua kunci ke dalam larik terurut untuk menghasilkan keluaran deterministik. Lakukan iterasi dengan pairs untuk mengumpulkan kunci, lalu gunakan table.sort untuk mengurutkannya.

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

Iterasi Tabel Bersarang

Untuk tabel bersarang (tabel yang berisi tabel), gabungkan dua perulangan: perulangan luar melakukan iterasi pada tingkat teratas, sedangkan perulangan dalam melakukan iterasi pada setiap tabel bersarang. Pola ini menangani kedalaman apa pun dengan rekursi untuk struktur bersarang yang benar-benar arbitrer.

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

Memfilter dengan ipairs

Buat daftar yang telah difilter dengan melakukan iterasi menggunakan ipairs dan menambahkan elemen yang lolos dari predikat. Hasilnya adalah larik baru yang hanya berisi elemen yang cocok.

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

Memetakan dengan ipairs

Terapkan transformasi pada setiap elemen: lakukan iterasi dan buat larik baru yang berisi nilai hasil transformasi. Ini adalah padanan Lua untuk map() dalam bahasa fungsional.

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

pairs pada Iterator Kustom

Anda dapat membuat objek kustom yang dapat diiterasi dengan mengembalikan iterator dan status dari sebuah fungsi. Pola ini mencerminkan cara kerja internal pairs: fungsi tersebut mengembalikan next, t, nil. Pabrik iterator Anda juga mengembalikan sebuah fungsi beserta status opsional.

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

Pemeriksaan Singkat

Pernyataan mana yang benar tentang pairs() dan ipairs()?

Ringkasan: pairs dan ipairs

Ringkasan:

  • ipairs: berurutan, kunci bilangan bulat dimulai dari 1, berhenti pada nil
  • pairs: semua kunci, urutan apa pun, tidak pernah berhenti lebih awal
  • Gunakan pairs untuk kamus; ipairs untuk larik
  • Jangan pernah menambahkan/menghapus kunci di tengah pairs; memperbarui nilai yang sudah ada aman
  • Kumpulkan+urutkan kunci untuk keluaran deterministik

Pertanyaan yang Sering Diajukan

Apakah pelajaran “Melakukan Iterasi pada Tabel dengan pairs dan ipairs” gratis?

Ya — teks lengkap “Melakukan Iterasi pada Tabel dengan pairs dan ipairs” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “Melakukan Iterasi pada Tabel dengan pairs dan ipairs”?

Telusuri tabel dengan aman menggunakan pairs() dan ipairs(). Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 3 dari 4.

Berapa lama pelajaran “Melakukan Iterasi pada Tabel dengan pairs dan ipairs” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Tabel sebagai Larik
  2. Tabel sebagai Kamus
  3. Melakukan Iterasi pada Tabel dengan pairs dan ipairs
  4. Tabel Bertingkat dan Data Terstruktur
← Kembali ke Lua Academy