คำถามติดแท็ก lua-table

8
เหตุใดอาร์เรย์ Lua (ตาราง) จึงเริ่มต้นที่ 1 แทนที่จะเป็น 0
ฉันไม่เข้าใจเหตุผลเบื้องหลังการตัดสินใจในส่วนนี้ของ Lua เหตุใดการจัดทำดัชนีจึงเริ่มต้นที่ 1 ฉันได้อ่าน (เช่นเดียวกับคนอื่น ๆ ) กระดาษที่ยอดเยี่ยมนี้ สำหรับฉันดูเหมือนว่าเป็นมุมแปลก ๆ ของภาษาที่น่าเรียนรู้และเขียนโปรแกรมมาก อย่าเข้าใจว่าฉันผิด Lua ยอดเยี่ยมมาก แต่ต้องมีคำอธิบายที่ไหนสักแห่ง สิ่งที่ฉันพบส่วนใหญ่ (บนเว็บ) เป็นเพียงการบอกว่าดัชนีเริ่มต้นที่ 1 หยุดเต็ม มันน่าสนใจมากที่จะอ่านสิ่งที่นักออกแบบพูดเกี่ยวกับเรื่องนี้ โปรดทราบว่าฉันเป็นมือใหม่ใน Lua ฉันหวังว่าฉันจะไม่พลาดสิ่งที่ชัดเจนเกี่ยวกับตาราง
125 arrays  lua  lua-table 

8
วิธีที่มีประสิทธิภาพที่สุดในการตรวจสอบว่าตาราง Lua ว่างเปล่า (ไม่มีรายการ) หรือไม่?
วิธีใดที่มีประสิทธิภาพที่สุดในการพิจารณาว่าตารางว่างเปล่า (นั่นคือปัจจุบันไม่มีทั้งค่าสไตล์อาร์เรย์หรือค่าสไตล์คำสั่ง) ขณะนี้ฉันใช้next(): if not next(myTable) then -- Table is empty end มีวิธีที่มีประสิทธิภาพมากกว่านี้หรือไม่? หมายเหตุ: ตัว#ดำเนินการไม่เพียงพอที่นี่เนื่องจากมันทำงานเฉพาะกับค่าสไตล์อาร์เรย์ในตารางดังนั้นจึง#{test=2}แยกไม่ออก#{}เนื่องจากทั้งสองส่งคืน 0 โปรดทราบว่าการตรวจสอบว่าตัวแปรตารางnilไม่เพียงพอหรือไม่เนื่องจากฉันไม่ได้มองหา ค่าศูนย์ แต่เป็นตารางที่มี 0 รายการ (เช่น{})
120 lua  lua-table 

4
วิธีตรวจสอบว่าตารางมีองค์ประกอบใน Lua หรือไม่?
มีวิธีตรวจสอบว่าตารางมีค่าหรือไม่? ฉันมีฟังก์ชั่น (ไร้เดียงสา) เป็นของตัวเอง แต่ฉันสงสัยว่ามีบางอย่างที่ "เป็นทางการ" หรือไม่ หรือสิ่งที่มีประสิทธิภาพมากขึ้น ... function table.contains(table, element) for _, value in pairs(table) do if value == element then return true end end return false end อย่างไรก็ตามเหตุผลหลักที่ฉันใช้ฟังก์ชันนี้คือการใช้ตารางเป็นชุดกล่าวคือไม่มีองค์ประกอบที่ซ้ำกัน มีอย่างอื่นที่ฉันสามารถใช้ได้หรือไม่?

1
จะลบรายการตาราง lua ด้วยคีย์ได้อย่างไร?
ฉันมีตาราง lua ที่ฉันใช้เป็นแฮชแมปเช่นมีคีย์สตริง: local map = { foo = 1, bar = 2 } ฉันต้องการ "ป๊อป" องค์ประกอบของตารางนี้ที่ระบุด้วยคีย์ มีtable.remove()วิธีการหนึ่ง แต่ใช้เพียงดัชนีขององค์ประกอบในการลบ (เช่นตัวเลข) ไม่ใช่คีย์ทั่วไป ฉันต้องการจะทำได้table.remove(map, 'foo')และนี่คือวิธีที่ฉันนำไปใช้: function table.removekey(table, key) local element = table[key] table[key] = nil return element end มีวิธีที่ดีกว่านี้หรือไม่?
97 lua  key  lua-table 
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.