Khai báo chỉ mục
Thuộc phần Giới thiệu về Luau trong hành trình Lua của Coddy. Bài học 78 trên 80.
Bạn đã gặp các kiểu map như {[string]: number} ở chương về bảng: chữ ký chỉ mục (index signature): mọi khóa chuỗi đều ánh xạ đến một giá trị số. Chúng rất hữu ích khi bạn chưa biết trước các khóa trong lúc viết code: bộ đếm, cài đặt, bộ nhớ đệm, điểm số, bất cứ thứ gì được tạo ra khi chương trình chạy.
type Counts = {[string]: number}
local counts: Counts = {}
counts["potion"] = 3 -- Có thể dùng bất kỳ chuỗi nào làm khóa (key)
counts["sword"] = 1
counts["potion"] += 1 -- Các giá trị (value) được kiểm tra là sốCó hai điều về thời gian chạy cần lưu ý khi làm việc với map. Thứ nhất, đọc một khóa chưa từng được đặt sẽ trả về nil: cách đếm phổ biến xử lý trường hợp đó bằng or, chuyển giá trị “thiếu” thành 0:
counts[item] = (counts[item] or 0) + 1Thứ hai, pairs() duyệt các khóa của map theo thứ tự không được đảm bảo: cùng một chương trình chạy hai lần có thể duyệt các khóa theo thứ tự khác nhau. Khi đầu ra cần có thứ tự nhất quán, hãy đưa các khóa vào một mảng, sắp xếp chúng bằng table.sort, rồi duyệt mảng đã sắp xếp:
local keys: {string} = {}
for key in pairs(counts) do
table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
print(`{key}: {counts[key]}`)
endThử thách
DễLưu điểm cho những người chơi có tên bạn chưa biết trước.
- Viết
type Scores = {[string]: number}và tạolocal scores: Scores = {}. - Thêm điểm:
scores["mia"] = (scores["mia"] or 0) + 5, sau đó làm tương tự với"leo"và3. - In ra
scores["mia"],scores["leo"]vàscores["zed"].
Nhấn Chạy code: đầu ra hiển thị 5, 3 và nil.
Tự làm thử
-- 1) Khai báo type Scores = {[string]: number}, rồi khai báo local scores: Scores = {}
-- 2) Cộng 5 điểm cho "mia" và 3 điểm cho "leo"
-- 3) In ra mia, leo và zed
Tất cả bài học trong Giới thiệu về Luau
1Bắt đầu với Luau
Luau là gì?Tại sao nên dùng Luau?Đoạn code Luau đầu tiênKiểm tra kiểu và chế độ lỗiÔn tập: Giới thiệu về Luau4Làm việc với hàm
Kiểu dữ liệu cho tham số và giá trị trả vềKiểu dữ liệu cho hàm ẩn danhHàm không trả về giá trịTham số tùy chọnGiá trị tham số mặc địnhGiá trị Boolean mặc địnhHàm có số lượng tham số thay đổiĐịnh nghĩa kiểu hàmÔn tập: hàm có kiểu dữ liệu2Kiểu dữ liệu cốt lõi
Số, chuỗi và BooleanKiểu 'any': lối thoátKiểu 'unknown'Kiểu Nil và kiểu tùy chọnSuy luận kiểu trong thực tếChú thích kiểu tường minhÔn tập: luyện tập với kiểu dữ liệu cốt lõi5Bí danh kiểu, kiểu hợp và kiểu giao
Bí danh kiểu cho kiểu nguyên thủyKiểu hợpLàm việc với kiểu hợpKiểu literalKiểu giaoKết hợp bí danh kiểuÔn tập: kết hợp kiểu nâng cao3Bảng có kiểu: mảng và Map
Mảng có kiểuThêm và đọc phần tửKiểu Map là gì?Khai báo và truy cập MapDuyệt bảngBảng có cấu trúc hỗn hợpĐọc lướiTạo lướitable.unpackÔn tập: mảng và MapTự luyện tập: Trình biên dịch Luau online