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

การแปลงตาราง: map, filter, reduce

สร้างตัวช่วยลำดับสูงเชิงฟังก์ชันสำหรับแปลงตาราง

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

รูปแบบเชิงฟังก์ชันใน Lua

Lua ไม่มี map/filter/reduce ในตัว แต่สามารถนำไปเขียนได้ง่ายด้วยคลอเชอร์และลูป for ทั่วไป

map: แปลงทุกองค์ประกอบ

map ใช้ฟังก์ชันกับแต่ละองค์ประกอบ แล้วส่งกลับตารางผลลัพธ์ใหม่

local function map(t, fn)
  local result = {}
  for i, v in ipairs(t) do result[i] = fn(v) end
  return result
end
local doubled = map({1,2,3}, function(x) return x * 2 end)
print(table.concat(doubled, ", "))  -- 2, 4, 6

filter: เก็บองค์ประกอบที่ตรงเงื่อนไข

filter จะเก็บเฉพาะองค์ประกอบที่เพรดิเคตส่งกลับค่าเป็นจริง

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 evens = filter({1,2,3,4,5}, function(x) return x % 2 == 0 end)
print(table.concat(evens, ", "))  -- 2, 4

reduce: รวมเป็นค่าเดียว

reduce รวมองค์ประกอบจากซ้ายไปขวาโดยใช้ตัวสะสม

local function reduce(t, fn, init)
  local acc = init
  for _, v in ipairs(t) do acc = fn(acc, v) end
  return acc
end
local sum = reduce({1,2,3,4,5}, function(a,b) return a+b end, 0)
print(sum)  -- 15

การเชื่อมการดำเนินการ

เชื่อม map, filter และ reduce เพื่อสร้างสายการประมวลผลข้อมูลที่สื่อความหมายได้ชัดเจน

local nums = {1,2,3,4,5,6,7,8,9,10}
local result = reduce(
  map(
    filter(nums, function(x) return x % 2 == 0 end),
    function(x) return x * x end
  ),
  function(a,b) return a + b end, 0
)
print(result)  -- 220

forEach: ผลข้างเคียง

forEach วนซ้ำโดยไม่สร้างตารางใหม่ เหมาะสำหรับผลข้างเคียง เช่น การพิมพ์ข้อมูล

local function forEach(t, fn)
  for i, v in ipairs(t) do fn(v, i) end
end
forEach({"a","b","c"}, function(v, i) print(i, v) end)

flatMap: map แล้วทำให้แบน

flatMap แปลงแต่ละองค์ประกอบให้เป็นรายการ แล้วนำรายการทั้งหมดมาต่อกัน

local function flatMap(t, fn)
  local result = {}
  for _, v in ipairs(t) do
    for _, item in ipairs(fn(v)) do
      result[#result+1] = item
    end
  end
  return result
end
local expanded = flatMap({1,2,3}, function(x) return {x, x*10} end)

zip: รวมสองตาราง

zip จับคู่องค์ประกอบจากสองตารางให้เป็นตารางของคู่ข้อมูล

local function zip(a, b)
  local result = {}
  for i = 1, math.min(#a, #b) do
    result[i] = {a[i], b[i]}
  end
  return result
end
local zipped = zip({1,2,3}, {"a","b","c"})

การทำงานกับตารางพจนานุกรม

สำหรับตารางคีย์-ค่า ให้วนซ้ำด้วย pairs แทน ipairs และรวบรวมคู่คีย์-ค่า

local function mapValues(t, fn)
  local result = {}
  for k, v in pairs(t) do result[k] = fn(v) end
  return result
end
local doubled = mapValues({x=1,y=2}, function(v) return v*2 end)

แนวคิดการประเมินค่าแบบขี้เกียจ

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

หมายเหตุด้านประสิทธิภาพ

map/filter แต่ละครั้งจะจัดสรรตารางใหม่ สำหรับลูปที่ทำงานถี่ การเปลี่ยนแปลงในตำแหน่งเดิมอาจมีประสิทธิภาพมากกว่า แต่ต้องแลกกับการไม่คงความไม่เปลี่ยนแปลงและความชัดเจนของโค้ด

คำถามเกี่ยวกับ reduce

reduce({1,2,3,4}, function(a,b) return a+b end, 0) ส่งกลับค่าอะไร

ทบทวน: map/filter/reduce

mapแปลงข้อมูล filterเลือกข้อมูล และ reduceรวมข้อมูล ฟังก์ชันลำดับสูงทั้งสามนี้เป็นพื้นฐานของการประมวลผลข้อมูลเชิงฟังก์ชันใน Lua

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

บทเรียน “การแปลงตาราง: map, filter, reduce” ฟรีหรือไม่

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

คุณจะเรียนรู้อะไรในบทเรียน “การแปลงตาราง: map, filter, reduce”

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

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

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

บทเรียน “การแปลงตาราง: map, filter, reduce” ใช้เวลานานแค่ไหน

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

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

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

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

  1. table.sort พร้อมตัวเปรียบเทียบ
  2. table.concat และ table.move
  3. การคัดลอกแบบลึกและแบบตื้น
  4. การแปลงตาราง: map, filter, reduce
← กลับไปที่ Lua Academy