Saya tahu ini adalah posting lama, tetapi saya ingin menambahkan sesuatu untuk anak cucu. Cara sederhana untuk menangani masalah yang Anda hadapi adalah dengan membuat tabel lain, dari nilai ke kunci.
yaitu. Anda memiliki 2 tabel yang memiliki nilai yang sama, satu menunjuk satu arah, satu menunjuk ke arah lain.
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
Anda kemudian dapat meminta tabel baru untuk melihat apakah tabel tersebut memiliki 'elemen' kunci. Ini mencegah kebutuhan untuk mengulangi setiap nilai dari tabel lainnya.
Jika ternyata Anda tidak dapat benar-benar menggunakan 'elemen' sebagai kunci, karena itu bukan string misalnya, tambahkan checksum atau tostring
di atasnya misalnya, lalu gunakan itu sebagai kuncinya.
Mengapa Anda ingin melakukan ini? Jika tabel Anda sangat besar, jumlah waktu untuk mengulangi setiap elemen akan signifikan, sehingga Anda tidak dapat melakukannya terlalu sering. Overhead memori tambahan akan relatif kecil, karena akan menyimpan 2 penunjuk ke objek yang sama, bukan 2 salinan dari objek yang sama. Jika tabel Anda sangat kecil, maka itu tidak akan menjadi masalah, bahkan mungkin lebih cepat untuk mengulang daripada mencari peta lain.
Namun kata-kata dalam pertanyaan tersebut sangat menyarankan bahwa Anda memiliki banyak item untuk ditangani.