การแปลงตาราง: 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, 6filter: เก็บองค์ประกอบที่ตรงเงื่อนไข
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, 4reduce: รวมเป็นค่าเดียว
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) -- 220forEach: ผลข้างเคียง
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 ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ
บทเรียนทั้งหมดในหลักสูตรนี้
- table.sort พร้อมตัวเปรียบเทียบ
- table.concat และ table.move
- การคัดลอกแบบลึกและแบบตื้น
- การแปลงตาราง: map, filter, reduce