ตาราง Lua (ตาราง)
ตาราง Lua เป็นโครงสร้างข้อมูลที่ใช้ในการช่วยให้เราสามารถสร้างความแตกต่างของข้อมูลเช่น: ดิจิตอลพจนานุกรม
ตาราง Lua กับอาร์เรย์ที่เกี่ยวข้องคุณสามารถใช้ชนิดของค่าใด ๆ ที่จะทำให้ดัชนีของอาร์เรย์ แต่ค่านี้ไม่ได้เป็นศูนย์
ขนาดโต๊ะ Lua ไม่คงที่คุณสามารถขยายได้ตามความต้องการของพวกเขา
Lua ยังผ่านตารางเพื่อแก้ไขโมดูล (Module), แพคเกจ (package) และวัตถุ (Object) ของ สำหรับการบ่งชี้ string.format ตัวอย่างเช่น "รูปแบบ" การจัดทำดัชนีสตริงตาราง
ตาราง (Table) การกำหนดค่า
ตัวสร้างคือการแสดงออกเพื่อสร้างและเริ่มต้นตาราง ตาราง Lua เป็นสิ่งที่มีประสิทธิภาพที่ไม่ซ้ำกัน ตัวสร้างที่ง่ายที่สุดคือ {} ใช้ในการสร้างตารางว่าง คุณโดยตรงสามารถเริ่มต้นอาร์เรย์:
-- 初始化表 mytable = {} -- 指定值 mytable[1]= "Lua" -- 移除引用 mytable = nil -- lua 垃圾回收会释放内存
เมื่อเราโต๊ะชุดขององค์ประกอบและจากนั้นกำหนดให้ B แล้วและจุด B ในหน่วยความจำเดียวกัน หากมีการตั้งศูนย์แล้ว B ยังสามารถเข้าถึงตารางขององค์ประกอบ ถ้าคุณไม่ได้ระบุจุดตัวแปรไปเก็บขยะ Lua จะทำความสะอาดหน่วยความจำที่สอดคล้องกัน
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงคำอธิบายข้างต้นของสถานการณ์:
-- 简单的 table mytable = {} print("mytable 的类型是 ",type(mytable)) mytable[1]= "Lua" mytable["wow"] = "修改前" print("mytable 索引为 1 的元素是 ", mytable[1]) print("mytable 索引为 wow 的元素是 ", mytable["wow"]) -- alternatetable和mytable的是指同一个 table alternatetable = mytable print("alternatetable 索引为 1 的元素是 ", alternatetable[1]) print("mytable 索引为 wow 的元素是 ", alternatetable["wow"]) alternatetable["wow"] = "修改后" print("mytable 索引为 wow 的元素是 ", mytable["wow"]) -- 释放变量 alternatetable = nil print("alternatetable 是 ", alternatetable) -- mytable 仍然可以访问 print("mytable 索引为 wow 的元素是 ", mytable["wow"]) mytable = nil print("mytable 是 ", mytable)
รหัสข้างต้นจะถูกดำเนินการเป็นผลมาจาก:
mytable 的类型是 table mytable 索引为 1 的元素是 Lua mytable 索引为 wow 的元素是 修改前 alternatetable 索引为 1 的元素是 Lua mytable 索引为 wow 的元素是 修改前 mytable 索引为 wow 的元素是 修改后 alternatetable 是 nil mytable 索引为 wow 的元素是 修改后 mytable 是 nil
ตารางการดำเนินงาน
ตารางต่อไปนี้แสดงวิธีการทั่วไปของการดำเนินงาน:
เลขที่ | วิธีการและวัตถุประสงค์ |
---|---|
1 | table.concat (ตาราง [ ก.ย. [ เริ่มต้น [จบ]]]): concat เป็น concatenate (เชื่อมโยงห่วงโซ่) ย่อ. table.concat () ฟังก์ชันระบุพารามิเตอร์ที่ระบุไว้ในส่วนตารางอาร์เรย์ขององค์ประกอบทั้งหมดจากตำแหน่งเริ่มต้นไปยังตำแหน่งที่สิ้นสุดระยะห่างระหว่างองค์ประกอบในคั่นระบุ (SEP) |
2 | table.insert (ตาราง [POS] ค่า): ตารางอาร์เรย์ส่วนที่ระบุที่ตั้ง (POS) แทรกเป็นองค์ประกอบของมูลค่า. พารามิเตอร์ Pos เป็นตัวเลือกและเริ่มต้นที่ส่วนปลายของอาร์เรย์ |
3 | table.maxn (ตาราง) ระบุค่าคีย์ตารางสำหรับตัวเลขบวกทั้งหมดค่าคีย์ที่ใหญ่ที่สุด. หากมีค่าเป็นบวกองค์ประกอบสำคัญไม่อยู่ก็จะส่งกลับ 0 (หลังจาก Lua5.2 วิธีนี้ไม่ได้อยู่ในบทความนี้จะใช้ฟังก์ชั่นที่กำหนดเองเพื่อให้บรรลุ) |
4 | table.remove (ตาราง [POS]) ส่งกลับอาร์เรย์ของตารางส่วนตั้งอยู่ที่องค์ประกอบ POS ตำแหน่งองค์ประกอบหลังจากนั้นจะถูกย้ายไปข้างหน้า. พารามิเตอร์ Pos เป็นตัวเลือกและเริ่มต้นที่ระยะเวลาในตารางเริ่มต้นจากองค์ประกอบสุดท้ายที่ถูกลบ |
5 | table.sort (ตาราง [comp]) สำหรับตารางที่กำหนดในการเรียงลำดับ |
ต่อไปเรามาดูตัวอย่างของวิธีการเหล่านี้
การเชื่อมต่อตาราง
เราสามารถใช้ concat () วิธีการเชื่อมต่อสองตาราง:
fruits = {"banana","orange","apple"} -- 返回 table 连接后的字符串 print("连接后的字符串 ",table.concat(fruits)) -- 指定连接字符 print("连接后的字符串 ",table.concat(fruits,", ")) -- 指定索引来连接 table print("连接后的字符串 ",table.concat(fruits,", ", 2,3))
ดำเนินการออกผลโค้ดข้างต้น:
连接后的字符串 bananaorangeapple 连接后的字符串 banana, orange, apple 连接后的字符串 orange, apple
แทรกและการกำจัด
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการแทรกตารางและการกำจัดการดำเนินงาน:
fruits = {"banana","orange","apple"} -- 在末尾插入 table.insert(fruits,"mango") print("索引为 4 的元素为 ",fruits[4]) -- 在索引为 2 的键处插入 table.insert(fruits,2,"grapes") print("索引为 2 的元素为 ",fruits[2]) print("最后一个元素为 ",fruits[5]) table.remove(fruits) print("移除后最后一个元素为 ",fruits[5])
ดำเนินการออกผลโค้ดข้างต้น:
索引为 4 的元素为 mango 索引为 2 的元素为 grapes 最后一个元素为 mango 移除后最后一个元素为 nil
การเรียงลำดับตาราง
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงการจัดเรียง () วิธีการในการใช้งานสำหรับการจัดเรียงตาราง:
fruits = {"banana","orange","apple","grapes"} print("排序前") for k,v in ipairs(fruits) do print(k,v) end table.sort(fruits) print("排序后") for k,v in ipairs(fruits) do print(k,v) end
ดำเนินการออกผลโค้ดข้างต้น:
排序前 1 banana 2 orange 3 apple 4 grapes 排序后 1 apple 2 banana 3 grapes 4 orange
ตารางที่แม็กซ์
table.maxn หลังจาก Lua5.2 วิธีนี้ไม่ได้อยู่ที่เรากำหนดวิธีการ table_maxn
ตัวอย่างต่อไปนี้แสดงให้เห็นถึงวิธีการขอรับตารางค่าสูงสุด:
function table_maxn(t) local mn = 0 for k, v in pairs(t) do if mn < k then mn = k end end return mn end tbl = {[1] = "a", [2] = "b", [3] = "c", [26] = "z"} print("tbl 长度 ", #tbl) print("tbl 最大值 ", table_maxn(tbl))
ดำเนินการออกผลโค้ดข้างต้น:
tbl 长度 3 tbl 最大值 26