Menu
CoddyTech

pairs() và ipairs()

Thuộc phần Logic và luồng chương trình trong hành trình Lua của Coddy. Bài học 3 trên 54.

Giờ bạn đã học cả pairs() và ipairs(), điều quan trọng là hiểu khi nào nên dùng từng hàm. Lựa chọn hoàn toàn phụ thuộc vào cấu trúc của bảng và mục đích bạn muốn đạt được.

Dùng ipairs() khi bạn có bảng dạng danh sách với các khóa số nguyên liên tiếp bắt đầu từ 1. Hàm này xử lý các phần tử theo thứ tự và dừng ở giá trị nil đầu tiên, nên rất phù hợp với mảng cần giữ nguyên thứ tự.

Dùng pairs() khi bảng của bạn có khóa chuỗi, nhiều kiểu khóa khác nhau hoặc khi bạn cần truy cập mọi mục bất kể có khoảng trống hay không. Hàm này duyệt qua mọi cặp khóa và giá trị trong bảng mà không theo thứ tự cụ thể nào.

Hãy xem bảng hỗn hợp này:

local gameData = {
    "Level 1",
    "Level 2", 
    "Level 3",
    currentLevel = 2,
    playerName = "Hero"
}

Nếu bạn dùng ipairs(), bạn sẽ chỉ thấy ba chuỗi cấp độ. Nếu bạn dùng pairs(), bạn sẽ thấy cả năm mục, bao gồm các khóa dạng chuỗi.

challenge icon

Thử thách

Dễ

Viết một hàm countSequentialItems nhận một bảng data và trả về số lượng phần tử có khóa số nguyên liên tiếp.

Dùng ipairs() để đếm số phần tử trong phần liên tiếp của bảng, bắt đầu từ chỉ số 1 cho đến nil đầu tiên. Điều này sẽ giúp bạn hiểu sự khác biệt giữa ipairs() và pairs() khi làm việc với các bảng hỗn hợp.

Tham số:

  • data (table): Một bảng hỗn hợp chứa cả khóa số nguyên liên tiếp và khóa chuỗi

Giá trị trả về: Số lượng phần tử liên tiếp (number)

Tự làm thử

function countSequentialItems(data)
    -- Viết code ở đây
end
quiz iconTự kiểm tra

Bài học này có một bài trắc nghiệm ngắn. Bắt đầu bài học để trả lời và theo dõi tiến độ.

Tất cả bài học trong Logic và luồng chương trình

Tự luyện tập: Trình biên dịch Lua online