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 cherrypairs: 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)
endMenghitung 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) -- 3Mengubah 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))
endMengumpulkan 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 = 8080Iterasi 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()
endMemfilter 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 10Memetakan 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 WORLDpairs 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
-- zPemeriksaan Singkat
Pernyataan mana yang benar tentang pairs() dan ipairs()?
Ringkasan: pairs dan ipairs
Ringkasan:
ipairs: berurutan, kunci bilangan bulat dimulai dari 1, berhenti pada nilpairs: semua kunci, urutan apa pun, tidak pernah berhenti lebih awal- Gunakan
pairsuntuk kamus;ipairsuntuk 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
- Tabel sebagai Larik
- Tabel sebagai Kamus
- Melakukan Iterasi pada Tabel dengan pairs dan ipairs
- Tabel Bertingkat dan Data Terstruktur