Lua Academy · Pelajaran

Mengubah Jadual: map, filter, reduce

Bina pembantu tertib lebih tinggi berfungsi untuk transformasi jadual.

Pelajaran 4 daripada 413 langkah

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, 6

filter: 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, 4

reduce: 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)  -- 15

Merangkaikan 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)  -- 220

forEach: 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.

Percuma untuk bermula

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

  1. table.sort dengan Pembanding
  2. table.concat dan table.move
  3. Salinan Mendalam dan Salinan Cetek
  4. Mengubah Jadual: map, filter, reduce
← Kembali ke Lua Academy