2017-02-28 54 views
2

你會如何在Lua中製作雙向地圖?我是Lua的新手,我能想到的唯一方法是將每個鍵 - 值對放在一個表中,遍歷每對,將它們(鍵值交換)添加到原始表中。Lua中的雙向地圖

有沒有更好的方法來做到這一點?

+0

爲什麼你需要這樣做?還有其他方法,例如,您可以將兩個表(左側和右側)封裝在具有metatable的表中,並提供確保兩者一致性的方法。或者如果你不需要在右邊快速查找,則可以使用一個表格 –

回答

3

我不認爲有更好的方法(假設你可以處理鍵/值衝突)。在向表中添加新值(或更新/刪除現有值)時,稍微好一點的方法可能是存儲交換的值,但總體思路是相同的。

+3

當將兩個方向放入同一個表格時,最好在添加/移除鍵/值對時立即更新反轉的對。如果你不這樣做,然後用'pairs'迭代來添加反函數,那麼事情就會中斷。 (你正在向表中添加條目,這可能會觸發一個調整大小,這可能會改變底層存儲條目的順序 - 所以'next' /'pairs'會做一個「醉漢漫步」,跳過元素或遍歷它們幾次如果你忘記了這些,你可以得到一些醜陋的難以發現的錯誤。) – nobody