Przekształcanie tabel: map, filter, reduce
Proszę tworzyć funkcyjne funkcje wyższego rzędu pomocne w przekształcaniu tabel.
Przekształcanie tabel: map, filter, reduce to bezpłatna lekcja Lua Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Lua Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Lua Academy zawiera 4 lekcji w sumie.
Wzorce funkcyjne w Lua
Lua nie ma wbudowanych funkcji map/filter/reduce, ale ich implementacja za pomocą domknięć i ogólnych pętli for jest prosta.
map: przekształcanie każdego elementu
map stosuje funkcję do każdego elementu i zwraca nową tabelę wyników.
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: zachowywanie pasujących elementów
filter zachowuje tylko te elementy, dla których predykat zwraca wartość true.
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: składanie do jednej wartości
reduce łączy elementy od lewej do prawej za pomocą akumulatora.
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Łączenie operacji
Łącz map, filter i reduce w przejrzyste potoki przetwarzania danych.
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: efekty uboczne
forEach wykonuje iterację bez tworzenia nowej tabeli — jest przydatne w przypadku efektów ubocznych, takich jak wyświetlanie.
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: mapowanie, a następnie spłaszczanie
flatMap mapuje każdy element na listę, a następnie łączy wszystkie listy.
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: łączenie dwóch tabel
zip łączy elementy dwóch tabel w pary i zwraca tabelę par.
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"})Praca ze słownikowymi tabelami
W przypadku tabel klucz–wartość wykonuj iterację za pomocą pairs zamiast ipairs i zbieraj pary klucz–wartość.
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)Koncepcja leniwej ewaluacji
W przypadku dużych zbiorów danych rozważ leniwe iteratory (domknięcia zwracające po jednym elemencie), aby uniknąć tworzenia dużych tabel pośrednich.
Uwaga dotycząca wydajności
Każde wywołanie map/filter tworzy nową tabelę. W ciasnych pętlach wydajniejsza może być modyfikacja w miejscu, ale odbywa się to kosztem niezmienności i przejrzystości.
Pytanie o reduce
Co zwraca reduce({1,2,3,4}, function(a,b) return a+b end, 0)?
Podsumowanie: map/filter/reduce
map przekształca, filter wybiera, a reduce składa. Te trzy funkcje wyższego rzędu stanowią podstawę funkcyjnego przetwarzania danych w Lua.
Często zadawane pytania
Czy lekcja „Przekształcanie tabel: map, filter, reduce” jest bezpłatna?
Tak — pełny tekst „Przekształcanie tabel: map, filter, reduce” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Lua Academy, przejdź na CoddyKit PRO. Kurs Lua Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Przekształcanie tabel: map, filter, reduce”?
Proszę tworzyć funkcyjne funkcje wyższego rzędu pomocne w przekształcaniu tabel. Ćwiczysz Lua Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Lua Academy?
Nie wymagamy żadnego doświadczenia. Lua Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Przekształcanie tabel: map, filter, reduce”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Lua Academy?
Tak. Każda lekcja Lua Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- table.sort z komparatorami
- table.concat i table.move
- Kopia głęboka i płytka
- Przekształcanie tabel: map, filter, reduce