24. Library tabel — Solusi PR

File solusi .lua ada di exercises/24/homework/solutions/.

Soal 1 — Daftar belanja

Soal. Cetak daftar nama dalam satu baris, dipisahkan koma.

Solusi.

local items = {"milk", "bread", "eggs", "apples"}
print(table.concat(items, ", "))

Keluaran:

milk, bread, eggs, apples

Kesalahan umum.

  • Membuat baris secara manual dengan perulangan dan ... Bisa berhasil, tapi table.concat adalah alat satu baris yang tepat untuk ini.

Soal 2 — Dari besar ke kecil

Soal. Urutkan angka dari yang terbesar ke terkecil, lalu cetak semuanya.

Cara memikirkannya. Berikan table.sort sebuah komparator yang mengembalikan true ketika angka pertama lebih besar.

Solusi.

local nums = {30, 12, 7, 24}
table.sort(nums, function(a, b)
    return a > b
end)
print(table.concat(nums, " "))

Keluaran:

30 24 12 7

Kesalahan umum.

  • Menulis return a < b, yang menghasilkan urutan menaik. Komparator menjawab pertanyaan "apakah a harus berada lebih dulu?" — untuk urutan terbesar duluan, a menang ketika lebih besar.

Soal 3 — Papan peringkat

Soal. Urutkan nama secara alfabetis dan cetak sebagai daftar bernomor.

Cara memikirkannya. table.sort tanpa komparator akan mengurutkan teks secara alfabetis. Lalu jalan dengan ipairs, cetak posisi dan nama.

Solusi.

local players = {"Ben", "Ada", "Cara", "Dan"}
table.sort(players)

for i, name in ipairs(players) do
    print(i .. ". " .. name)
end

Keluaran:

1. Ada
2. Ben
3. Cara
4. Dan

Tantangan — Tiga teratas

Soal. Urutkan dari terbesar dan cetak tiga teratas.

Cara memikirkannya. Urutkan secara menurun, lalu salin posisi 1, 2, dan 3 ke dalam tabel kecil dan concat tabel itu.

Solusi.

local scores = {30, 12, 45, 7, 24, 50}
table.sort(scores, function(a, b)
    return a > b
end)

local top = {scores[1], scores[2], scores[3]}
print(table.concat(top, " "))

Keluaran:

50 45 30

Kesalahan umum.

  • Mencetak scores[1] .. scores[2] .. scores[3] tanpa spasi, menghasilkan 504530. Tabel kecil ditambah concat dengan " " menjaga jarak antar angka.

Selesai?

Sekarang kamu sudah punya alat-alat paling berguna dari library tabel: insert, remove, concat, sort, dan unpack. Bab terakhir Bagian 5 — Modul dan require — menunjukkan cara memisahkan program ke dalam beberapa file.