2009-11-18 33 views
73

Tôi có một bảng lua mà tôi sử dụng như một hashmap, tức là với các phím chuỗi:Làm thế nào để loại bỏ một mục nhập bảng lua bằng khóa của nó?

local map = { foo = 1, bar = 2 } 

Tôi muốn "pop" một phần tử của bảng này xác định bởi chính nó. Có một phương thức table.remove(), nhưng nó chỉ lấy chỉ mục của phần tử cần xóa (tức là một số) và không phải là khóa chung. Tôi muốn có thể thực hiện table.remove(map, 'foo') và đây là cách tôi đã triển khai:

function table.removekey(table, key) 
    local element = table[key] 
    table[key] = nil 
    return element 
end 

Có cách nào tốt hơn để làm điều đó không?

+4

+1 vào câu hỏi rất hữu ích vì bạn đã đưa ra câu trả lời "" mà tôi cần; ngay cả khi không có cách "tốt hơn". –

Trả lời

64

Không, đặt giá trị của khóa thành nil là cách được chấp nhận để xóa một mục trong phần hashmap của bảng. Những gì bạn đang làm là tiêu chuẩn. Tuy nhiên, tôi khuyên bạn không nên ghi đè table.remove() - đối với phần mảng của bảng, hàm table.remove() mặc định bao gồm đổi số chỉ mục, ghi đè của bạn sẽ không thực hiện. Nếu bạn muốn thêm hàm của mình vào tập hợp chức năng table, thì có thể tôi sẽ đặt tên cho nó là table.removekey() hoặc một số chức năng như vậy.

+0

Cảm ơn phản hồi về việc xóa. Về tên của chức năng, điều này chủ yếu là làm cho quan điểm của tôi rõ ràng. Tôi thường không ghi đè các chức năng tiêu chuẩn. Tôi chắc chắn sẽ không sử dụng nó dưới cái tên đó ('table.removekey()' cũng sẽ là lựa chọn tốt nhất của tôi). – Wookai

+0

Nếu bạn chỉ sử dụng nó trong một khối duy nhất, bạn thậm chí còn tốt hơn hết hiệu năng bằng cách đơn giản là làm cho nó trở thành một hàm cục bộ (tiết kiệm chi phí của một tra cứu toàn cầu cho mỗi cuộc gọi). Tôi thường xuyên nhập 'table.insert' và' table.remove' vào vùng tên cục bộ nếu tôi sử dụng chúng thường xuyên, thường là một cái gì đó như 'tinsert()' và 'tremove()'. – Amber

+0

Cảm ơn mẹo hiệu suất. Tôi sẽ cố gắng nhập các hàm tôi thường sử dụng vào không gian tên cục bộ để xem điều này có tạo nên sự khác biệt lớn hay không. – Wookai

Các vấn đề liên quan