0Pricing
Lua Academy · Pelajaran

map, filter, reduce

Bangun pembantu tingkat tinggi.

map, filter, reduce adalah pelajaran Lua Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Lua Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Lua Academy mencakup 4 pelajaran total.

Tiga Besar

Pemetaan, penyaringan, dan reduksi adalah alat inti untuk memproses daftar secara fungsional. Masing-masing menerima daftar dan fungsi, lalu mengembalikan hasil tanpa Anda harus menulis perulangannya sendiri.

Lua tidak menyediakannya secara bawaan, tetapi ketiganya mudah ditulis dan memperlihatkan cara kerja fungsi tingkat tinggi.

Pemetaan: Mengubah Setiap Item

Pemetaan menerapkan sebuah fungsi ke setiap elemen dan mengumpulkan hasilnya ke dalam daftar baru. Daftar asli tidak berubah.

Fungsi yang Anda teruskan menentukan transformasinya, sehingga satu map dapat menangani penggandaan, pengkuadratan, atau perubahan apa pun pada setiap item.

local function map(t, f)
  local out = {}
  for i, v in ipairs(t) do
    out[i] = f(v)
  end
  return out
end

local r = map({1, 2, 3}, function(x) return x * x end)
print(table.concat(r, ", "))

Pemetaan Mempertahankan Panjang

Pemetaan selalu mengembalikan daftar dengan jumlah elemen yang sama seperti masukan. Setiap item dipetakan tepat ke satu item keluaran.

Jika Anda perlu membuang item, itulah tugas penyaringan, bukan pemetaan.

local function map(t, f)
  local out = {}
  for i, v in ipairs(t) do out[i] = f(v) end
  return out
end

local names = {"ada", "lin", "sam"}
local caps = map(names, string.upper)
print(table.concat(caps, " "))
print(#caps)

Penyaringan: Mempertahankan Sebagian Item

Penyaringan hanya mempertahankan elemen yang menghasilkan true dari sebuah predikat. Predikat adalah fungsi yang mengembalikan nilai boolean.

Hasilnya adalah daftar baru yang mungkin lebih pendek daripada daftar asli, tetapi tidak pernah lebih panjang.

local function filter(t, pred)
  local out = {}
  for _, v in ipairs(t) do
    if pred(v) then out[#out + 1] = v end
  end
  return out
end

local evens = filter({1,2,3,4,5,6}, function(x) return x % 2 == 0 end)
print(table.concat(evens, ", "))

Penyaringan Mempertahankan Urutan

Penyaringan menelusuri daftar sesuai urutan dan menambahkan setiap item yang dipertahankan, sehingga elemen yang tersisa tetap berada dalam urutan aslinya.

Menggunakan #out + 1 sebagai indeks mempertahankan hasil sebagai larik tanpa celah, yang diperlakukan Lua sebagai urutan yang benar.

local function filter(t, pred)
  local out = {}
  for _, v in ipairs(t) do
    if pred(v) then out[#out + 1] = v end
  end
  return out
end

local long = filter({"hi", "hello", "yo", "howdy"},
  function(s) return #s > 2 end)
print(table.concat(long, ", "))

Reduksi: Menggabungkan Menjadi Satu

Reduksi, yang juga disebut pelipatan, meringkas daftar menjadi satu nilai. Reduksi membawa sebuah akumulator dan menggabungkannya dengan setiap elemen menggunakan fungsi Anda.

Anda menyediakan nilai awal dan fungsi penggabung, lalu reduksi meneruskan akumulator melalui setiap item.

local function reduce(t, f, acc)
  for _, v in ipairs(t) do
    acc = f(acc, v)
  end
  return acc
end

local sum = reduce({1,2,3,4}, function(a, x) return a + x end, 0)
print(sum)

Reduksi Bersifat Fleksibel

Dengan mengubah fungsi penggabung dan nilai awal, reduksi dapat menjumlahkan, mengalikan, mencari nilai maksimum, atau membangun string.

Di sini, akumulator dimulai dari 1 dan melakukan perkalian, sehingga menghasilkan perkalian bergaya faktorial.

local function reduce(t, f, acc)
  for _, v in ipairs(t) do acc = f(acc, v) end
  return acc
end

local product = reduce({1,2,3,4,5}, function(a, x) return a * x end, 1)
print(product)

Reduksi untuk Mendapatkan Nilai Maksimum

Reduksi tidak terbatas pada perhitungan aritmetika. Fungsi penggabung dapat membandingkan nilai dan mempertahankan nilai yang lebih besar pada setiap langkah.

Memulai akumulator dari elemen pertama atau dari bilangan yang sangat kecil memungkinkan reduksi menemukan nilai maksimum dengan rapi.

local function reduce(t, f, acc)
  for _, v in ipairs(t) do acc = f(acc, v) end
  return acc
end

local max = reduce({3, 8, 2, 11, 6},
  function(a, x) if x > a then return x else return a end end, -math.huge)
print(max)

Menghubungkan Ketiganya

Kekuatan sebenarnya terlihat ketika Anda menghubungkan ketiganya. Penyaringan mempersempit data, pemetaan mengubahnya, dan reduksi meringkasnya.

Setiap tahap merupakan langkah kecil yang jelas, dan bersama-sama ketiganya menggantikan perulangan manual yang rumit.

local function filter(t, p) local o={} for _,v in ipairs(t) do if p(v) then o[#o+1]=v end end return o end
local function map(t, f) local o={} for i,v in ipairs(t) do o[i]=f(v) end return o end
local function reduce(t, f, a) for _,v in ipairs(t) do a=f(a,v) end return a end

local nums = {1,2,3,4,5,6}
local r = reduce(map(filter(nums, function(x) return x%2==0 end),
  function(x) return x*x end), function(a,x) return a+x end, 0)
print(r)

Data Asli Tetap Aman

Pemetaan dan penyaringan selalu membuat tabel baru dan tidak pernah mengubah masukan. Hal ini membuat alur pemrosesan dapat diprediksi: data dari tahap sebelumnya tetap tersedia setelah setiap tahap.

Reduksi juga tidak mengubah daftar, melainkan hanya mengembalikan hasil gabungannya.

Umum untuk Semua Daftar

Karena fungsi merupakan parameter, alat-alat ini dapat digunakan pada data apa pun. map yang sama dapat mengubah string menjadi huruf besar, menyesuaikan skala harga, atau memformat rekaman.

Menulis perulangan sekali lalu meneruskan fungsi yang berbeda merupakan alasan utama fungsi kelas utama sangat berguna.

local function map(t, f) local o={} for i,v in ipairs(t) do o[i]=f(v) end return o end

local prices = {10, 20, 30}
local withTax = map(prices, function(p) return p * 1.18 end)
print(table.concat(withTax, ", "))

Pemeriksaan Singkat

Pikirkan bagaimana operasi-operasi ini memengaruhi panjang daftar.

Ringkasan

Pemetaan mengubah setiap item dan mempertahankan panjang, penyaringan mempertahankan item yang memenuhi predikat, dan reduksi melipat daftar menjadi satu nilai menggunakan akumulator.

Menghubungkan penyaringan, pemetaan, dan reduksi membangun alur pemrosesan data yang jelas tanpa perulangan manual, dan tabel asli tetap tidak berubah.

Pertanyaan yang Sering Diajukan

Apakah pelajaran “map, filter, reduce” gratis?

Ya — teks lengkap “map, filter, reduce” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Lua Academy, upgrade ke CoddyKit PRO. Kursus Lua Academy mencakup 4 pelajaran total.

Apa yang akan aku pelajari di “map, filter, reduce”?

Bangun pembantu tingkat tinggi. Kamu berlatih Lua Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.

Apakah aku perlu pengalaman untuk memulai Lua Academy?

Tidak diperlukan pengalaman sebelumnya. Lua Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.

Berapa lama pelajaran “map, filter, reduce” memakan waktu?

Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.

Bisakah aku menulis dan menjalankan kode dalam pelajaran Lua Academy ini?

Ya. Setiap pelajaran Lua Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.

Semua pelajaran dalam kursus ini

  1. Fungsi sebagai Nilai
  2. map, filter, reduce
  3. Aplikasi Parsial
  4. Menyusun Fungsi
← Kembali ke Lua Academy