Mengubah Jadual: map, filter, reduce
Bina pembantu tertib lebih tinggi berfungsi untuk transformasi jadual.
Mengubah Jadual: map, filter, reduce ialah pelajaran Lua Academy percuma di CoddyKit. Ini ialah pelajaran 4 daripada 4. Sebanyak 3 pelajaran dalam laluan pembelajaran ini boleh dibaca sepenuhnya secara percuma — selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan praktikal dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Pelajaran ini merupakan sebahagian daripada laluan pembelajaran Lua Academy, dan kemajuan anda disegerakkan merentas web serta aplikasi CoddyKit. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Corak Fungsian dalam Lua
Lua tidak mempunyai map/filter/reduce terbina dalam, tetapi semuanya mudah dilaksanakan menggunakan penutupan dan gelung for generik.
map: Mengubah Setiap Elemen
map menggunakan fungsi pada setiap elemen dan memulangkan jadual baharu yang mengandungi hasil.
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: Mengekalkan Elemen yang Sepadan
filter hanya mengekalkan elemen yang predikatnya memulangkan benar.
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: Melipat kepada Satu Nilai
reduce menggabungkan elemen dari kiri ke kanan menggunakan pengumpul.
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) -- 15Merangkaikan Operasi
Rangkaikan map, filter dan reduce untuk saluran data yang ekspresif.
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: Kesan Sampingan
forEach melakukan lelaran tanpa membina jadual baharu — berguna untuk kesan sampingan seperti mencetak.
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 kemudian Ratakan
flatMap memetakan setiap elemen kepada senarai, kemudian mencantumkan semua senarai.
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: Menggabungkan Dua Jadual
zip memadankan elemen daripada dua jadual menjadi jadual pasangan.
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"})Bekerja dengan Jadual Kamus
Untuk jadual kunci-nilai, lakukan lelaran dengan pairs dan bukannya ipairs, kemudian kumpulkan pasangan kunci-nilai.
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)Konsep Penilaian Malas
Untuk set data yang besar, pertimbangkan lelaran malas (penutupan yang menghasilkan satu elemen pada satu masa) bagi mengelakkan pembinaan jadual perantaraan yang besar.
Nota Prestasi
Setiap map/filter mencipta peruntukan jadual baharu. Untuk gelung yang ketat, mutasi di tempatnya mungkin lebih cekap, tetapi mengorbankan kebolehubahan dan kejelasan.
Soalan reduce
Apakah yang dipulangkan oleh reduce({1,2,3,4}, function(a,b) return a+b end, 0)?
Imbas Kembali: map/filter/reduce
map mengubah, filter memilih, reduce melipat. Ketiga-tiga fungsi tertib lebih tinggi ini membentuk asas pemprosesan data fungsian dalam Lua.
Pelajari Lua dengan tutor kecerdasan buatan — percuma
Tulis dan jalankan kod sebenar dalam pelayar anda, dapatkan bantuan segera daripada tutor kecerdasan buatan yang tersedia 24/7, dan sambung semula dari tempat anda berhenti di web atau dalam aplikasi.
- Kursus
- 40
- Pelajaran
- 159
Soalan Lazim
Adakah pelajaran “Mengubah Jadual: map, filter, reduce” percuma?
Ya — sebanyak 3 pelajaran dalam laluan pembelajaran Lua Academy, termasuk “Mengubah Jadual: map, filter, reduce”, boleh dibaca sepenuhnya secara percuma di web ini. Selepas itu, CoddyKit PRO membuka akses kepada semua pelajaran, serta latihan interaktif dengan penyunting kod terbina dalam dan tutor kecerdasan buatan yang tersedia 24/7. Kursus Lua Academy merangkumi sejumlah 4 pelajaran.
Apakah yang akan saya pelajari dalam “Mengubah Jadual: map, filter, reduce”?
Bina pembantu tertib lebih tinggi berfungsi untuk transformasi jadual. Anda berlatih Lua Academy menggunakan kod praktikal yang dijalankan terus dalam pelayar, manakala tutor kecerdasan buatan 24/7 menjawab soalan anda semasa anda mengikuti pelajaran.
Adakah saya memerlukan pengalaman untuk memulakan Lua Academy?
Tiada pengalaman terdahulu diperlukan. Pembelajaran Lua Academy di CoddyKit disusun untuk pelajar daripada peringkat pemula hingga lanjutan, jadi anda boleh bermula di sini atau dari awal dan belajar mengikut kadar anda sendiri. Ini ialah pelajaran 4 daripada 4.
Berapa lamakah pelajaran “Mengubah Jadual: map, filter, reduce” diambil?
Kebanyakan pelajaran CoddyKit mengambil masa kira-kira 5–10 minit. Setiap pelajaran ringkas dan interaktif, jadi anda boleh membuat kemajuan secara berterusan dan menyambung tepat dari tempat anda berhenti di web atau aplikasi.
Bolehkah saya menulis dan menjalankan kod dalam pelajaran Lua Academy ini?
Ya. Setiap pelajaran Lua Academy menyertakan penyunting kod terbina dalam, jadi anda boleh menulis dan menjalankan kod sebenar terus dalam pelayar serta menerima maklum balas kecerdasan buatan serta-merta — tanpa memerlukan persediaan setempat.
Semua pelajaran dalam kursus ini
- table.sort dengan Pembanding
- table.concat dan table.move
- Salinan Mendalam dan Salinan Cetek
- Mengubah Jadual: map, filter, reduce