Tôi biết đây là một bài đăng cũ, nhưng tôi muốn thêm một cái gì đó cho hậu thế. Cách đơn giản để xử lý vấn đề mà bạn có là tạo một bảng khác, có giá trị thành khóa.
tức là. bạn có 2 bảng có cùng giá trị, một bảng chỉ một hướng, một hướng khác.
function addValue(key, value)
if (value == nil) then
removeKey(key)
return
end
_primaryTable.key = value
_secodaryTable.value = key
end
function removeKey(key)
local value = _primaryTable.key
if (value == nil) then
return
end
_primaryTable.key = nil
_secondaryTable.value = nil
end
function getValue(key)
return _primaryTable.key
end
function containsValue(value)
return _secondaryTable.value ~= nil
end
Sau đó, bạn có thể truy vấn bảng mới để xem bảng có 'yếu tố' chính hay không. Điều này ngăn cản sự cần thiết phải lặp qua tất cả các giá trị của bảng khác.
Nếu hóa ra bạn không thể sử dụng 'yếu tố' làm khóa, vì đó không phải là chuỗi, sau đó thêm tổng kiểm tra hoặc 'toString' vào ví dụ, sau đó sử dụng nó làm Chìa khóa.
Tại sao bạn muốn thực hiện việc này? Nếu các bảng của bạn rất lớn, thì lượng thời gian lặp lại thông qua mọi phần tử sẽ rất quan trọng, ngăn bạn thực hiện nó rất thường xuyên. Chi phí bộ nhớ bổ sung sẽ tương đối nhỏ, vì nó sẽ lưu 2 con trỏ tới cùng một đối tượng, thay vì 2 bản sao của cùng một đối tượng. Nếu bảng của bạn là rất nhỏ, sau đó nó sẽ quan trọng ít hơn nhiều, Infact nó thậm chí có thể nhanh hơn để lặp lại hơn để có một tra cứu bản đồ.
Từ ngữ của câu hỏi tuy nhiên mạnh mẽ gợi ý rằng bạn có một số lượng lớn các mục cần xử lý.
ký hiệu _ có nghĩa là gì? – Martin
Đơn giản chỉ là biến "rác" có tên '_'. 'pairs()' trả về 'khóa, giá trị', nhưng trong ví dụ này, tôi chỉ cần giá trị. Nó là một loại quy ước (được thông qua trong cuốn sách "Lập trình trong Lua" http://www.lua.org/pil/index.html) để sử dụng biến '_' này để lưu trữ những thứ mà bạn không cần. – Wookai