Tables are one of the most powerful and versatile data structures in Lua. They can be used to represent arrays, dictionaries, sets, and more. In this section, we will explore the basics of tables, how to create and manipulate them, and some common use cases.

What is a Table?

A table in Lua is a collection of key-value pairs. It is the only data structure in Lua that allows you to store multiple values in a single variable. Tables are dynamic, meaning they can grow and shrink as needed.

Key Concepts:

  • Key-Value Pairs: Each element in a table is stored as a pair of a key and a value.
  • Dynamic Size: Tables can dynamically change in size.
  • Heterogeneous: Tables can store different types of values (numbers, strings, functions, other tables, etc.).

Creating Tables

You can create a table using the {} syntax.

-- Creating an empty table
local myTable = {}

-- Creating a table with initial values
local fruits = {"apple", "banana", "cherry"}

Accessing Table Elements

You can access elements in a table using the [] operator or the . operator for string keys.

local fruits = {"apple", "banana", "cherry"}

-- Accessing elements by index
print(fruits[1])  -- Output: apple

-- Using string keys
local person = {name = "John", age = 30}
print(person["name"])  -- Output: John
print(person.age)      -- Output: 30

Modifying Tables

You can add, update, or remove elements in a table.

Adding Elements

local fruits = {"apple", "banana"}
table.insert(fruits, "cherry")  -- Adds "cherry" at the end
print(fruits[3])  -- Output: cherry

Updating Elements

local fruits = {"apple", "banana"}
fruits[2] = "orange"  -- Updates the second element
print(fruits[2])  -- Output: orange

Removing Elements

local fruits = {"apple", "banana", "cherry"}
table.remove(fruits, 2)  -- Removes the second element
print(fruits[2])  -- Output: cherry

Iterating Over Tables

You can use loops to iterate over tables.

Using for Loop

local fruits = {"apple", "banana", "cherry"}

for i = 1, #fruits do
    print(fruits[i])
end

Using pairs and ipairs

  • pairs: Iterates over all key-value pairs in a table.
  • ipairs: Iterates over integer keys in a table.
local person = {name = "John", age = 30}

-- Using pairs
for key, value in pairs(person) do
    print(key, value)
end

-- Using ipairs
local fruits = {"apple", "banana", "cherry"}
for index, value in ipairs(fruits) do
    print(index, value)
end

Common Use Cases

Arrays

Tables can be used as arrays (lists).

local numbers = {1, 2, 3, 4, 5}
for i, num in ipairs(numbers) do
    print(num)
end

Dictionaries

Tables can also be used as dictionaries (maps).

local capitals = {
    France = "Paris",
    Italy = "Rome",
    Japan = "Tokyo"
}
print(capitals["Japan"])  -- Output: Tokyo

Practical Exercises

Exercise 1: Create and Manipulate a Table

  1. Create a table named students with the following initial values: "Alice", "Bob", "Charlie".
  2. Add a new student "David" to the table.
  3. Update "Bob" to "Bobby".
  4. Remove "Charlie" from the table.
  5. Print all the student names.

Solution:

-- Step 1: Create a table
local students = {"Alice", "Bob", "Charlie"}

-- Step 2: Add a new student
table.insert(students, "David")

-- Step 3: Update "Bob" to "Bobby"
students[2] = "Bobby"

-- Step 4: Remove "Charlie"
table.remove(students, 3)

-- Step 5: Print all student names
for i, student in ipairs(students) do
    print(student)
end

Exercise 2: Use Tables as Dictionaries

  1. Create a table named phoneBook with the following key-value pairs: "Alice" = "1234", "Bob" = "5678", "Charlie" = "91011".
  2. Add a new entry "David" = "1213".
  3. Update "Bob" to "Bobby" with the same phone number.
  4. Remove "Charlie" from the table.
  5. Print all the names and phone numbers.

Solution:

-- Step 1: Create a table
local phoneBook = {
    Alice = "1234",
    Bob = "5678",
    Charlie = "91011"
}

-- Step 2: Add a new entry
phoneBook["David"] = "1213"

-- Step 3: Update "Bob" to "Bobby"
phoneBook["Bobby"] = phoneBook["Bob"]
phoneBook["Bob"] = nil

-- Step 4: Remove "Charlie"
phoneBook["Charlie"] = nil

-- Step 5: Print all names and phone numbers
for name, number in pairs(phoneBook) do
    print(name, number)
end

Conclusion

Tables are a fundamental part of Lua programming, providing a flexible and powerful way to store and manipulate data. Understanding how to create, access, modify, and iterate over tables is essential for any Lua programmer. In the next section, we will delve into metatables and metamethods, which allow you to customize the behavior of tables.

© Copyright 2024. All rights reserved