0Pricing
Lua Academy · บทเรียน

การวนดูตารางด้วย 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  cherry

pairs: คีย์ทั้งหมด

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 WORLD

pairs กับตัวท่องแบบกำหนดเอง

คุณสามารถทำให้ออบเจ็กต์แบบกำหนดเองท่องได้โดยให้ฟังก์ชันคืนตัวท่องและสถานะ รูปแบบนี้คล้ายกับการทำงานภายในของ 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 และหยุดที่ nil
  • pairs: คีย์ทั้งหมด ลำดับใดก็ได้ และไม่หยุดก่อนถึงจุดสิ้นสุด
  • ใช้ 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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตารางในรูปแบบอาร์เรย์
  2. ตารางในรูปแบบพจนานุกรม
  3. การวนดูตารางด้วย pairs และ ipairs
  4. ตารางซ้อนกันและข้อมูลแบบมีโครงสร้าง
← กลับไปที่ Lua Academy