0Pricing
Lua Academy · บทเรียน

ตารางในรูปแบบพจนานุกรม

ใช้คีย์ข้อความและคีย์แบบผสมเพื่อจัดเก็บคู่คีย์-ค่า

ตารางในรูปแบบพจนานุกรม เป็นบทเรียน Lua Academy ฟรีบน CoddyKit นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน คุณสามารถอ่านบทเรียนทั้งหมดด้านล่างฟรี — จากนั้นลองปฏิบัติด้วยตัวคุณเองในเบราว์เซอร์พร้อมตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7 บทเรียนนี้เป็นส่วนหนึ่งของเส้นทางการเรียน Lua Academy และความก้าวหน้าของคุณจะซิงค์ข้ามเว็บและแอป CoddyKit คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คีย์สตริง

ตารางที่ใช้คีย์สตริงจะทำหน้าที่เป็นพจนานุกรม (แผนผังแฮช) เข้าถึงฟิลด์ด้วยรูปแบบจุด t.key (สำหรับตัวระบุที่ถูกต้อง) หรือรูปแบบวงเล็บ t["key"] (สำหรับสตริงใด ๆ) ทั้งสองรูปแบบให้ผลเทียบเท่ากัน โดยรูปแบบวงเล็บรองรับคีย์แบบไดนามิก

local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"

print(user.name)        -- Alice
print(user["age"])      -- 30

local field = "role"
print(user[field])      -- admin (dynamic key)

ลิเทอรัลของตาราง

คุณสามารถเริ่มต้นพจนานุกรมด้วยลิเทอรัลของตารางโดยใช้ไวยากรณ์ key = value นี่เป็นวิธีที่ใช้กันมากที่สุดในการสร้างระเบียนใน lua คุณสามารถผสมสมาชิกแบบอาร์เรย์และแบบพจนานุกรมไว้ในลิเทอรัลเดียวกันได้

local config = {
  host = "localhost",
  port = 3306,
  database = "myapp",
  debug = false,
  tags = {"web", "api"},  -- nested array
}

print(config.host)        -- localhost
print(config.port)        -- 3306
print(config.tags[1])     -- web

การนับด้วยพจนานุกรม

กรณีใช้งานพจนานุกรมแบบคลาสสิกคือการนับความถี่ ให้ท่องผ่านรายการ โดยใช้สมาชิกแต่ละตัวเป็นคีย์และเพิ่มค่าตัวนับ ตรวจสอบค่า nil ก่อนเพิ่มค่า — ใช้ count[word] or 0 เป็นค่าเริ่มต้น

local words = {"lua","is","fast","lua","is","lua"}
local freq = {}

for _, w in ipairs(words) do
  freq[w] = (freq[w] or 0) + 1
end

for word, count in pairs(freq) do
  print(word, count)
end
-- lua 3, is 2, fast 1

การจัดกลุ่มด้วยพจนานุกรม

การจัดกลุ่มข้อมูลตามคุณสมบัติ: ท่องผ่านรายการและใช้คีย์การจัดกลุ่มเพื่อเพิ่มสมาชิกลงในรายการที่อยู่ในพจนานุกรม วิธีนี้เทียบเท่ากับ GROUP BY ของ SQL หรือรูปแบบ defaultdict ของ Python ใน lua

local people = {
  {name="Alice", dept="eng"},
  {name="Bob",   dept="hr"},
  {name="Carol", dept="eng"},
  {name="Dave",  dept="hr"},
}
local groups = {}

for _, p in ipairs(people) do
  local d = p.dept
  groups[d] = groups[d] or {}
  groups[d][#groups[d]+1] = p.name
end

print(table.concat(groups.eng, ", "))  -- Alice, Carol

การตรวจสอบการมีอยู่ของคีย์

ทดสอบว่าคีย์มีอยู่หรือไม่โดยเปรียบเทียบค่าของคีย์กับ nil โปรดระวัง: หากค่าที่เก็บไว้ที่คีย์เป็น nil คีย์นั้นจะถือว่าไม่มีอยู่ สำหรับตัวบ่งชี้การมีอยู่ ให้เก็บค่าเป็น true แทน nil

local cache = {result=42, mode="fast"}

if cache.result ~= nil then
  print("cached:", cache.result)  -- 42
end

-- Key not present:
if cache.timeout == nil then
  print("no timeout set")
end

-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
  print("access granted")
end

การลบคีย์

กำหนดค่าคีย์ของตารางเป็น nil เพื่อลบคีย์นั้น คู่คีย์-ค่าจะหายไป และตัวเก็บขยะสามารถเรียกคืนหน่วยความจำของค่าได้ วิธีนี้ไม่สามารถใช้ลบตัวแปรเฉพาะที่ได้ — ใช้ได้เฉพาะกับสมาชิกของตาราง

local session = {token="abc123", user="Alice", expires=3600}
print(session.token)   -- abc123

session.token = nil
print(session.token)   -- nil (removed)

-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count)   -- 2

การรวมพจนานุกรม

รวมตารางสองตารางโดยท่องผ่านตารางหนึ่งแล้วคัดลอกสมาชิกไปยังอีกตาราง หากทั้งสองตารางมีคีย์เดียวกัน ค่าจากตารางที่สองจะมีผล วิธีนี้เทียบเท่ากับ Object.assign ของ JavaScript

local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}

local function merge(base, over)
  local result = {}
  for k, v in pairs(base) do result[k] = v end
  for k, v in pairs(over) do result[k] = v end
  return result
end

local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic)  -- red 12 true

คีย์ได้ทุกชนิด

คีย์ของตารางสามารถเป็นค่าใดก็ได้ที่ไม่ใช่ nil และไม่ใช่ NaN เช่น สตริง ตัวเลข บูลีน ฟังก์ชัน หรือแม้แต่ตารางอื่น คีย์จำนวนเต็มและคีย์สตริงจะถูกจัดเก็บต่างกันภายใน แต่เข้าถึงได้เหมือนกันด้วยรูปแบบวงเล็บ

local t = {}
local function myKey() end

t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4

print(t["string"])  -- 1
print(t[42])        -- 2
print(t[true])      -- 3
print(t[myKey])     -- 4

การท่องตามลำดับ

pairs() ของ lua ไม่รับประกันลำดับการท่อง หากต้องการท่องตามลำดับที่กำหนด ให้รวบรวมคีย์ไว้ในอาร์เรย์ เรียงลำดับอาร์เรย์ แล้วจึงท่องผ่าน

local scores = {Alice=95, Bob=87, Carol=91, Dave=78}

local names = {}
for name in pairs(scores) do
  names[#names+1] = name
end
table.sort(names)

for _, name in ipairs(names) do
  print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)

รูปแบบค่าเริ่มต้น

รูปแบบที่มีประโยชน์คือการใช้ตาราง "defaults" ผ่านเมตาเทเบิล __index เมื่อไม่พบคีย์ในตารางหลัก lua จะค้นหาคีย์นั้นในตารางค่าเริ่มต้น วิธีนี้ช่วยให้กำหนดค่าแบบเป็นชั้นได้โดยไม่ต้องรวมตาราง

local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}

setmetatable(config, {__index = defaults})

print(config.timeout)  -- 60  (overridden)
print(config.retries)  -- 3   (from defaults)
print(config.verbose)  -- false (from defaults)

ตรวจสอบอย่างรวดเร็ว

คุณจะลบคีย์ "x" ออกจากตาราง t ใน lua ได้อย่างไร

ทบทวน: ตารางในรูปแบบพจนานุกรม

ประเด็นสำคัญ:

  • รูปแบบจุดและวงเล็บ: t.key == t["key"]
  • ค่าที่ไม่ใช่ nil และไม่ใช่ NaN สามารถเป็นคีย์ได้
  • กำหนดค่าเป็น nil เพื่อลบคีย์
  • การนับความถี่: t[k] = (t[k] or 0) + 1
  • การท่องตามลำดับ: รวบรวมคีย์ → เรียงลำดับ → ท่องผ่าน
  • ใช้เมตาเทเบิล __index สำหรับค่าเริ่มต้น

คำถามที่พบบ่อย

บทเรียน “ตารางในรูปแบบพจนานุกรม” ฟรีหรือไม่

ใช่ — ข้อความเต็มของ “ตารางในรูปแบบพจนานุกรม” ฟรีให้อ่านที่นี่บนเว็บ เพื่อปฏิบัติแบบโต้ตอบ (ตัวแก้ไขโค้ดในตัวและติวเตอร์ AI ตลอด 24/7) และปลดล็อคส่วนที่เหลือของคอร์ส Lua Academy ให้อัปเกรดเป็น CoddyKit PRO คอร์ส Lua Academy มีบทเรียนทั้งหมด 4 บทเรียน

คุณจะเรียนรู้อะไรในบทเรียน “ตารางในรูปแบบพจนานุกรม”

ใช้คีย์ข้อความและคีย์แบบผสมเพื่อจัดเก็บคู่คีย์-ค่า คุณปฏิบัติ Lua Academy ด้วยโค้ดที่ใช้งานได้จริงที่คุณเรียกใช้โดยตรงในเบราว์เซอร์ และติวเตอร์ AI ตลอด 24/7 ตอบคำถามของคุณขณะที่คุณไปผ่านบทเรียน

คุณต้องมีประสบการณ์ก่อนที่จะเริ่มเรียน Lua Academy หรือไม่

ไม่จำเป็นต้องมีประสบการณ์มาก่อน Lua Academy บน CoddyKit ออกแบบมาสำหรับผู้เริ่มต้นไปจนถึงผู้เรียนขั้นสูง คุณสามารถเริ่มต้นที่นี่หรือเริ่มจากตัวแรกและเรียนด้วยความเร็วของคุณเอง นี่คือบทเรียนที่ 2 จากทั้งหมด 4 บทเรียน

บทเรียน “ตารางในรูปแบบพจนานุกรม” ใช้เวลานานแค่ไหน

บทเรียน CoddyKit ส่วนใหญ่ใช้เวลาประมาณ 5–10 นาที แต่ละบทเรียนจึงสั้นและเป็นแบบโต้ตอบ คุณสามารถก้าวหน้าอย่างต่อเนื่องและกลับมาเรียนต่อจากตรงที่เพิ่งหยุดบนเว็บและแอปได้เลย

ฉันเขียนและรันโค้ดในบทเรียน Lua Academy นี้ได้ไหม

ได้ บทเรียน Lua Academy ทุกบทมีตัวแก้ไขโค้ดในตัว คุณจึงเขียนและรันโค้ดจริงได้เลยในเบราว์เซอร์ และได้รับข้อเสนอแนะจาก AI ในทันที — ไม่ต้องติดตั้งในเครื่องของคุณ

บทเรียนทั้งหมดในหลักสูตรนี้

  1. ตารางในรูปแบบอาร์เรย์
  2. ตารางในรูปแบบพจนานุกรม
  3. การวนดูตารางด้วย pairs และ ipairs
  4. ตารางซ้อนกันและข้อมูลแบบมีโครงสร้าง
← กลับไปที่ Lua Academy