Giới thiệu về từ điển

*Nội dung này được dịch bằng AI (Beta) và có thể có lỗi. Để xem trang này bằng tiếng Anh, hãy nhấp vào đây.

Từ điển là bảng có tên hoặc chìa khóa kết hợp với một giá trị thay vì một chỉ mục.

Ví dụ:

Cú pháp từ điển Luau

local pet = {
Name = "Bobbie",
Type = "Dog",
}

Sử dụng từ điển khi bạn cần phải gán nhãn các giá trị, không chỉ liệt kê chúng theo thứ tự như một mảng.Thực hành sử dụng từ điển trong hướng dẫn này bằng cách thay đổi các giá trị liên quan đến một người chơi

Ngữ pháp danh sách từ khóa

Giống như mảng, danh sách từ điển được gán cho một biến với dấu ngoặc kép {} . Các cặp chìa khóa-giá trị được lưu trên các dòng riêng biệt theo sau bởi một dấu phẩy.Các chìa khóa và giá trị có thể là bất kỳ loại dữ liệu nào, bao gồm chuỗi, số và tên biến.


local playerNames = {
player1 = "Zap",
player2 = "Kel",
}
print(playerNames["player1"])

Để tham chiếu các phần hoặc các đối tượng khác như chìa khóa, hãy sử dụng dấu ngoặc kép.


local greenPart = workspace.GreenPart
local redPart = workspace.RedPart
local partList = {
[greenPart] = true,
[redPart] = false,
}
print(partList[redPart])

Tạo một bảng từ điển

Một sử dụng hàng ngày của từ điển là tổ chức thông tin người chơi hoặc nhân vật.Các bước này khám phá cách thông tin nhân vật địch lý thuyết có thể được lưu trữ và truy cập.

  1. Trong một kịch bản mới, tạo một từ điển có tên là enemy.


    local enemy = {
    }
  2. Chìa khóa đầu tiên trong từ điển sẽ theo dõi tên của kẻ thù với một biến có tên là Name .


    local enemy = {
    Name
    }
  3. Gán tên kẻ thù cho chìa khóa, sau đó là một dấu phẩy.


    local enemy = {
    Name = "Spike",
    }
  4. Thêm một cặp chìa khóa-giá trị thứ hai cho sức khỏe mà kẻ thù nên có. Hãy nhớ rằng các chìa khóa luôn luôn sử dụng cùng một loại dữ liệu, nhưng các giá trị không phải.


    local enemy = {
    Name = "Spike",
    Health = 1000,
    }

Sử dụng giá trị của từ điển

Có hai cách để truy cập giá trị từ điển:

  • tableName["keyName"] (quan trọng, lưu ý các dấu ngoặc)
  • tableName.keyName

local enemy = {
Name = "Spike",
Health = 1000,
}
print("The villain " .. enemy["Name"] .. " approaches!")
print("The villain " .. enemy.Name .. " approaches!")

Kiểu nào sẽ sử dụng thường phụ thuộc vào mục đích của bảng.Đối với các bảng chứa một bộ sưu tập các giá trị như một danh sách người chơi trong một máy chủ, các lập trình viên thường sử dụng tableName["keyName"] .Đối với một từ điển được sử dụng để mô tả một đối tượng, lập trình viên có khả năng sử dụng tableName.keyName .

Thay đổi giá trị từ điển

Thay đổi giá trị của một chìa khóa giống như bất kỳ biến nào khác; sử dụng phép tính bằng nhau = .

  1. Bên dưới bảng enemy, đặt tên của kẻ thù thành một cái gì đó khác.


    local enemy = {
    Name = "Spike",
    Health = 1000,
    }
    enemy.Name = "Rana"
    print("The enemy's name is " .. enemy.Name)
  2. Thử nghiệm và kiểm tra cửa sổ Thành quả.

Biến có sẵn trước như khóa

Từ điển có thể tương tác với các biến có sẵn trước đó được tuyên bố ở các phần khác của một kịch bảnVí dụ mã hóa tiếp theo sử dụng một biến để thêm tên của người chơi làm chìa khóa khi họ tham gia trải nghiệm và sau đó đặt giá trị điểm của họ thành 0.

  1. Trong ServerScriptService , tạo một tập lệnh mới có tên PlayerPoints.Trong kịch bản, lấy Dịch vụ Người chơi và tạo một bảng từ vựng trống có tên là playerPoints.


    local Players = game:GetService("Players")
    local playerPoints = {
    }
  2. Mã hóa chức năng địa phương để đặt điểm của người chơi với một tham số cho biến người chơi mới. Kết nối chức năng với sự kiện Players.PlayerAdded.


    local playerPoints = {
    }
    local function setPoints(newPlayer)
    end
    Players.PlayerAdded:Connect(setPoints)
  3. Trong chức năng, thêm một biến để lấy Name của người chơi, một thuộc tính trong mỗi Đối tượng người chơi và một tuyên bố in để kiểm tra.


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    end
  4. Chèn name vào từ điển playerPoints như một chìa khóa và đặt giá trị, điểm của người chơi, thành 0.


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    end
  5. Sử dụng name để in tên của người chơi và playerPoints[name] để in giá trị của chìa khóa phù hợp với biến.


    local function setPoints(newPlayer)
    local name = newPlayer.Name
    print("hello " .. name)
    playerPoints[name] = 0
    print(name .. " has " .. playerPoints[name] .. " points.")
    end
  6. Chạy dự án và quan sát kết quả.

Hoàn thành kịch bản

local Players = game:GetService("Players")
local playerPoints = {
}
local function setPoints(newPlayer)
local name = newPlayer.Name
print("hello " .. name)
playerPoints[name] = 0
print(name .. " has " .. playerPoints[name] .. " points.")
end
Players.PlayerAdded:Connect(setPoints)

Thách thức tùy chọn

Dưới đây là một số thách thức áp dụng cho việc sử dụng từ điển theo nhiều cách khác nhau. Xem xem bạn có thể xây dựng mã cho chúng không.

  • Tạo một phần bẫy gây sát thương theo thời gian cho một người chơi. Một khi một người chơi chạm vào bẫy, hãy gây sát thương cho họ, chờ đợi, sau đó cho phép họ bị sát thương trở lại
  • Tạo một chức năng kiểm tra xem ai trong hai người chơi có nhiều điểm nhất bằng cách truy cập một từ điển.
  • Tạo một cipher, một hệ thống thay đổi một chuỗi cho một chuỗi khác để tạo một mã "bí mật".Ví dụ, chữ cái "A" có thể được thay thế bằng "G", hoặc từ "apple" có thể được thay thế bằng "orange".

Từ điển và pairs()

pairs() là một chức năng thường được sử dụng để lặp qua từ điển . Một ví dụ được thấy dưới đây.


local myDictionary = {
["Blue Player"] = "Ana",
["Gold Player"] = "Binh",
["Red Player"] = "Cate",
}
for key, value in pairs(myDictionary) do
print(key .. " is " .. value)
end

pairs() có thể được sử dụng để làm việc với chìa khóa, giá trị hoặc cả hai của một yếu tố từ điển.Trong vòng lặp for bên dưới, biến đầu tiên là chìa khóa.Tham số thứ hai là giá trị.Từ điển mà bạn muốn làm việc với được chuyển sang pairs() .


local inventory = {
["Gold Bricks"] = 43,
Carrots = 3,
Torches = 2,
}
print("You have:")
for itemName, itemValue in pairs(inventory) do
print(itemValue, itemName)
end

Khi thực thi, mã sẽ in ra các điều sau:


You have:
43 Gold Bricks
3 Carrots
2 Torches

Tóm tắt

Từ điển là bảng sử dụng cặp chìa khóa-giá trị thay vì các giá trị được lưu trong chỉ mục.Các từ điển và mảng bắt đầu tương tự bằng cách gán dấu ngoặc cong vào một biến.Giữ các dòng riêng biệt với dấu phân cách.

Tất cả các chìa khóa trong một từ điển nên sử dụng cùng một loại dữ liệu, nhưng các giá trị có thể trộn lẫn các loại dữ liệu mà không có vấn đề.

Cách mà một từ điển được truy cập có thể truyền đạt mục đích của nóMột từ điển các tính năng của kẻ thù có thể sẽ được truy cập bằng phép tính dot, trong khi danh sách các tên có thể sẽ sử dụng tableName[keyName] .

Khi sử dụng dấu ngoặc, hãy cẩn thận; các tên chìa khóa được tạo trong bảng phải được xử lý như chuỗi: tableName["keyName"] .Tuy nhiên, khi tham chiếu các đối tượng như các bộ phận, dấu ngoặc không cần thiết: tableName[keyName] .

Nhiều kịch bản cần phải đi qua bộ từ điển hoặc mảng, nhưng bạn có thể không luôn luôn biết điểm bắt đầu và kết thúc của các cấu trúc dữ liệu nàyVí dụ, một từ điển của người chơi có thể đang thay đổi hoặc người chơi có thể có một kho lưu trữ mảng có nhiều kích cỡ khác nhau

Trong những trường hợp này, bạn có thể sử dụng pairs()ipairs() trong một vòng lặp for để đi qua mỗi thành phần mà không có điểm bắt đầu và kết thúc được biết đến.Bạn cũng có thể sử dụng lặp lại chung thông qua từ khóa in để lặp qua các yếu tố mà không cần đến pairs() hoặc ipairs() .