การวนดูตารางด้วย pairs และ ipairs
สำรวจตารางอย่างปลอดภัยด้วย pairs() และ ipairs()
การวนดูตารางด้วย pairs และ ipairs เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
ipairs: การท่องอาร์เรย์ตามลำดับ
ipairs(t) ท่องผ่านลำดับจำนวนเต็มที่เริ่มจากดัชนี 1 และคืนคู่ (index, value) โดยจะหยุดที่ค่า nil ตัวเลือกนี้ปลอดภัยและคาดเดาได้สำหรับตารางลักษณะอาร์เรย์ที่ต้องคงลำดับ
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs: คีย์ทั้งหมด
pairs(t) ท่องผ่านคู่คีย์-ค่าทุกคู่ในตารางที่คีย์ไม่ใช่ nil โดยไม่ระบุลำดับ ภายในจะใช้ฟังก์ชัน next() ใช้ pairs สำหรับพจนานุกรม ตารางแบบผสม หรือเมื่อต้องการเยี่ยมชมคีย์ทั้งหมดโดยไม่คำนึงถึงชนิด
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 และ ipairs
ใช้ ipairs สำหรับอาร์เรย์แบบต่อเนื่อง (รับประกันลำดับและหยุดที่ nil) ใช้ pairs สำหรับพจนานุกรม ตารางแบบผสม หรือเมื่อต้องการคีย์ทั้งหมด การใช้ pairs กับอาร์เรย์ทำงานได้ แต่ไม่รับประกันลำดับ การใช้ ipairs กับพจนานุกรมจะไม่พบคีย์ที่ไม่ใช่จำนวนเต็ม
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การนับสมาชิก
สำหรับลำดับ #t จะให้จำนวนสมาชิก สำหรับพจนานุกรม #t เชื่อถือไม่ได้ — ให้ท่องด้วย pairs และนับด้วยตนเอง ความแตกต่างนี้สำคัญและช่วยป้องกันข้อผิดพลาดเมื่อทำงานกับตารางแบบผสมหรือคีย์สตริง
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การแก้ไขค่าระหว่างการท่อง
คุณสามารถ อัปเดตค่าของคีย์ที่มีอยู่ได้อย่างปลอดภัยขณะท่องด้วย pairs อย่างไรก็ตาม การเพิ่มหรือลบคีย์ระหว่างการท่องมีพฤติกรรมที่ไม่ได้กำหนดไว้ ให้รวบรวมการเปลี่ยนแปลงแล้วนำไปใช้หลังจบลูป
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การรวบรวมคีย์
การดำเนินการที่ใช้บ่อยคือการรวบรวมคีย์ทั้งหมดไว้ในอาร์เรย์ที่เรียงลำดับแล้ว เพื่อให้ผลลัพธ์แน่นอน ท่องด้วย pairs เพื่อรวบรวมคีย์ จากนั้นใช้ table.sort เพื่อเรียงลำดับ
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การท่องตารางซ้อน
สำหรับตารางซ้อน (ตารางที่มีตารางเป็นสมาชิก) ให้ใช้ลูปสองชั้น: ลูปชั้นนอกท่องระดับบนสุด และลูปชั้นในท่องตารางซ้อนแต่ละตาราง รูปแบบนี้รองรับความลึกใด ๆ โดยใช้การเรียกซ้ำสำหรับการซ้อนที่ไม่จำกัดจริง ๆ
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
สร้างรายการที่ผ่านการกรองโดยท่องด้วย ipairs และเพิ่มสมาชิกที่ผ่านเงื่อนไขลงในรายการ ผลลัพธ์คืออาร์เรย์ใหม่ที่มีเฉพาะสมาชิกที่ตรงตามเงื่อนไข
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
ใช้การแปลงกับสมาชิกทุกตัว: ท่องผ่านสมาชิกและสร้างอาร์เรย์ใหม่ที่มีค่าซึ่งผ่านการแปลงแล้ว วิธีนี้เทียบเท่ากับ map() ในภาษาเชิงฟังก์ชัน
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 กับตัวท่องแบบกำหนดเอง
คุณสามารถทำให้ออบเจ็กต์แบบกำหนดเองท่องได้โดยให้ฟังก์ชันคืนตัวท่องและสถานะ รูปแบบนี้คล้ายกับการทำงานภายในของ pairs: จะคืนค่า next, t, nil ตัวสร้างตัวท่องของคุณก็คืนฟังก์ชันพร้อมสถานะที่เป็นทางเลือกในลักษณะเดียวกัน
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ตรวจสอบอย่างรวดเร็ว
ข้อใดถูกต้องเกี่ยวกับ pairs() และ ipairs()
ทบทวน: pairs และ ipairs
สรุป:
ipairs: มีลำดับ ใช้คีย์จำนวนเต็มที่เริ่มจาก 1 และหยุดที่ nilpairs: คีย์ทั้งหมด ลำดับใดก็ได้ และไม่หยุดก่อนถึงจุดสิ้นสุด- ใช้
pairsกับพจนานุกรม และใช้ipairsกับอาร์เรย์ - อย่าเพิ่มหรือลบคีย์ระหว่างการท่องด้วย pairs การอัปเดตค่าที่มีอยู่ปลอดภัย
- รวบรวมและเรียงลำดับคีย์เพื่อให้ผลลัพธ์แน่นอน
คำถามที่พบบ่อย
บทเรียน “การวนดูตารางด้วย pairs และ ipairs” ฟรีหรือไม่
ใช่ — ข้อความเต็มของ “การวนดูตารางด้วย pairs และ ipairs” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน
คุณจะเรียนรู้อะไรในบทเรียน “การวนดูตารางด้วย pairs และ ipairs”
สำรวจตารางอย่างปลอดภัยด้วย pairs() และ ipairs() คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน
คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่
ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 3 จากทั้งหมด 4 บทเรียน
บทเรียน “การวนดูตารางด้วย pairs และ ipairs” ใช้เวลานานแค่ไหน
บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย
ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม
ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- ตารางในรูปแบบอาร์เรย์
- ตารางในรูปแบบพจนานุกรม
- การวนดูตารางด้วย pairs และ ipairs
- ตารางซ้อนกันและข้อมูลแบบมีโครงสร้าง