我通過elixir使用ets作爲一個簡單的內存中持久層來存儲和檢索密鑰,還偶爾使用foldl來減少許多具有不同值的重複密鑰。我正在使用包選項。如何在不掃描整個表的情況下檢索ets密鑰列表?
是否有一個簡單的O(1)方法可以檢索當前鍵的列表,而無需執行更多涉及的表遍歷或匹配或foldl?
歡迎Erlang或Elixir語法響應。
:ets.new(:cache, [:bag, :named_table, :protected])
我有一個原子鍵靜態地圖索引我用來幫助插入的整數。但並不是所有的按鍵均採用..
chunk_key_map = %{2 => :chunk_key_2, ..... 28 => :chunk_key_28}
如果沒有快速的方法,我知道我可以做一個ETS:查找嘗試對我的每一個靜態原子鍵值和測試= []和產生我自己的列表,但想看看ets是否支持這種功能。
感謝
這段代碼的問題是,你最終複製所有元素ETS表進入你的過程。請記住,ETS表保持在所有過程的「外部」,因此對ETS表的所有訪問都是通過複製進行的。 'match','match_object'和'select'的一個主要原因是它允許你更加具體地描述哪些元素被複制,可以在元素數據仍然「在表格中」的情況下完成測試。 – rvirding
謝謝羅伯特。我假設你只是指ets.lookup代碼段。不是ets.first,下面的代碼片段也是如此?這非常有幫助。那麼什麼是關鍵檢索的適當的匹配或選擇條款? – bibekp
是的,使用first/next意味着您將訪問每個元素,但它的確意味着您可能只能複製密鑰。 – rvirding