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

for แบบทั่วไปและ break

ใช้ for แบบทั่วไปกับ pairs/ipairs และควบคุมลำดับการทำงานของลูปด้วย break

for แบบทั่วไปและ break เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

โพรโทคอล for ทั่วไป

ลูป for ทั่วไปของ Lua ทำงานร่วมกับ ฟังก์ชันตัววนซ้ำ ไวยากรณ์คือ for vars in iter_func, state, init do ในแต่ละรอบ Lua จะเรียก iter_func(state, lastVar) แล้วกำหนดค่าที่ส่งกลับให้กับ vars ลูปจะหยุดเมื่อค่าที่ส่งกลับรายการแรกเป็น nil

-- Manual use of next() iterator
local t = {a=1, b=2, c=3}
local key, val = next(t, nil)   -- first entry
while key ~= nil do
  print(key, val)
  key, val = next(t, key)       -- advance
end

pairs() สำหรับคีย์ทั้งหมด

pairs(t) ส่งกลับตัววนซ้ำที่วนผ่านคู่คีย์-ค่าทั้งหมดในตาราง รวมทั้งคีย์สตริง คีย์จำนวนเต็ม และคีย์แบบผสม ลำดับการวนสำหรับคีย์ที่ไม่ใช่จำนวนเต็มไม่ได้กำหนดไว้ (เป็นลำดับแฮช) ทั้งส่วนอาร์เรย์และส่วนแฮชจะถูกรวมไว้ด้วย

local config = {
  host = "localhost",
  port = 8080,
  debug = true,
  [1] = "first",
}

for key, value in pairs(config) do
  print(key, value)
end
-- Prints all 4 entries in any order

ipairs() สำหรับคีย์อาร์เรย์

ipairs(t) วนผ่านคีย์จำนวนเต็มโดยเริ่มจาก 1 และหยุดที่ค่า nil แรก วิธีนี้ปลอดภัย คาดเดาได้ และรักษาลำดับไว้ ใช้ ipairs กับตารางลักษณะอาร์เรย์เมื่อจำเป็นต้องรักษาลำดับและต้องการหยุดที่ช่องว่างแรก

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

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

-- stops at first nil
local t = {10, 20, nil, 40}
for i, v in ipairs(t) do
  print(i, v)  -- only 1,10 and 2,20
end

pairs กับ ipairs

ควรทราบว่าเมื่อใดต้องใช้แต่ละแบบ: ipairs ใช้กับอาร์เรย์ที่เรียงลำดับต่อเนื่อง ส่วน pairs ใช้กับพจนานุกรมหรือตารางแบบผสม ipairs จะหยุดที่ช่องว่างค่า nil แรก ส่วน pairs จะเยี่ยมชมทุกคีย์ที่มีค่าไม่เป็น nil สำหรับอาร์เรย์ล้วน การใช้ ipairs เป็นรูปแบบที่เหมาะกับ Lua มากกว่า

local mixed = {10, 20, key="val", 30}

-- ipairs only sees array part in order
print("ipairs:")
for i, v in ipairs(mixed) do
  print(i, v)  -- 1:10, 2:20, 3:30
end

-- pairs sees everything
print("pairs:")
for k, v in pairs(mixed) do
  print(k, v)  -- 1:10, 2:20, 3:30, key:val
end

ตัววนซ้ำแบบกำหนดเองด้วยโคลสเชอร์

คุณสามารถเขียนตัววนซ้ำของตนเองเป็นโคลสเชอร์ได้ ฟังก์ชันสร้างจะส่งกลับโคลสเชอร์ที่เก็บสถานะและเลื่อนตำแหน่งในแต่ละครั้งที่ถูกเรียก เมื่อไม่มีข้อมูลเหลือให้ส่งกลับ ฟังก์ชันจะส่งกลับ nil เพื่อหยุด for ทั่วไป

local function range(from, to, step)
  step = step or 1
  local i = from - step
  return function()
    i = i + step
    if i <= to then return i end
  end
end

for n in range(1, 10, 2) do
  io.write(n .. " ")
end
print()  -- 1 3 5 7 9

string.gmatch เป็นตัววนซ้ำ

string.gmatch(s, pattern) ส่งกลับตัววนซ้ำที่วนผ่านส่วนที่ตรงกับรูปแบบทั้งหมดในสตริง s โดยทั่วไปใช้สำหรับแยกสตริง ดึงโทเคน หรือค้นหาตำแหน่งที่รูปแบบปรากฏทั้งหมด

local sentence = "the quick brown fox"

for word in string.gmatch(sentence, "%a+") do
  print(word)
end
-- the
-- quick
-- brown
-- fox

break ใน for ทั่วไป

คุณสามารถออกจากลูป for ทั่วไปก่อนกำหนดด้วย break วิธีนี้มีประโยชน์สำหรับการค้นหา โดยวนไปจนพบรายการที่ตรงกันแล้วจึงใช้ break หลังจากออกจากลูปแล้ว การทำงานจะดำเนินต่อที่คำสั่งหลัง end

local inventory = {
  {name="sword", damage=50},
  {name="shield", armor=30},
  {name="bow", damage=35},
}

local target = "shield"
for i, item in ipairs(inventory) do
  if item.name == target then
    print("Found at index", i)
    break
  end
end

การแก้ไขตารางระหว่างการวน

ห้ามเพิ่มหรือลบคีย์จากตารางขณะวนด้วย pairs() เพราะพฤติกรรมดังกล่าวไม่ได้กำหนดไว้ (การเปลี่ยนแปลงบางอย่างอาจถูกพบเห็น ขณะที่บางอย่างอาจถูกข้าม) หากจำเป็นต้องแก้ไขตาราง ให้เก็บการเปลี่ยนแปลงไว้ในรายการชั่วคราว แล้วนำไปใช้หลังจบลูป

local t = {a=1, b=2, c=3, d=4}
local toDelete = {}

-- Collect keys to delete
for k, v in pairs(t) do
  if v % 2 == 0 then
    toDelete[#toDelete+1] = k
  end
end

-- Delete after iteration
for _, k in ipairs(toDelete) do
  t[k] = nil
end
-- t = {a=1, c=3}

รูปแบบการแจกแจง

เมื่อจำเป็นต้องใช้ทั้งดัชนีและค่า ให้ใช้ ipairs ซึ่งมีทั้งสองอย่าง หากต้องการเฉพาะค่าและไม่สนใจดัชนี คุณสามารถใช้ _ เป็นชื่อตัวแปรตามธรรมเนียมที่หมายถึง "ไม่ใช้ค่า" สำหรับดัชนี

local colors = {"red", "green", "blue"}

-- With index
for i, color in ipairs(colors) do
  print(i .. ": " .. color)
end

-- Ignore index with _
for _, color in ipairs(colors) do
  print(color)  -- just the values
end

ใช้ next() โดยตรง

next(t, key) เป็นฟังก์ชันพื้นฐานสำหรับการวนผ่านข้อมูล โดยส่งกลับคู่คีย์-ค่าถัดจาก key หรือส่งกลับ nil หากไม่มีรายการเหลือ next(t, nil) จะให้รายการแรก คุณสามารถใช้ next(t) ~= nil เพื่อตรวจสอบว่าตารางไม่ว่างได้ ซึ่งเร็วกว่าการนับจำนวน

local function isEmpty(t)
  return next(t) == nil
end

print(isEmpty({}))       -- true
print(isEmpty({1,2,3}))  -- false
print(isEmpty({a=1}))    -- false

ตรวจสอบความเข้าใจ

ตัววนซ้ำใดจะหยุดที่ช่องว่างค่า nil แรกในตาราง

สรุป: for ทั่วไปและ break

สรุป:

  • pairs(t) — คีย์ทั้งหมด ไม่จำกัดลำดับ
  • ipairs(t) — คีย์จำนวนเต็ม 1..n เรียงลำดับและหยุดที่ nil
  • ตัววนซ้ำแบบกำหนดเอง: ส่งกลับโคลสเชอร์ที่ส่งกลับ nil เพื่อหยุด
  • break ออกจากลูปก่อนกำหนด
  • ห้ามแก้ไขตารางระหว่างการวนด้วย pairs ให้รวบรวมการเปลี่ยนแปลงแล้วนำไปใช้ภายหลัง
  • next(t) == nil — ตรวจสอบตารางว่างได้อย่างรวดเร็ว

คำถามที่พบบ่อย

บทเรียน “for แบบทั่วไปและ break” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “for แบบทั่วไปและ break” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “for แบบทั่วไปและ break”

ใช้ for แบบทั่วไปกับ pairs/ipairs และควบคุมลำดับการทำงานของลูปด้วย break คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 4 จากทั้งหมด 4 บทเรียน

บทเรียน “for แบบทั่วไปและ break” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

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

  1. คำสั่ง if, elseif และ else
  2. ลูป while และ repeat-until
  3. ลูป for เชิงตัวเลข
  4. for แบบทั่วไปและ break
← กลับไปที่ Lua Academy