I am working on :ets
and using duplicate bag
to store duplicate values.
cool_table = :ets.new(:cool_table, [:duplicate_bag])
:ets.insert(cool_table, [{:a, 3}, {:a, 100}, {:a, 100}])
:ets.delete_object(cool_table, {:a, 100})
:ets.lookup(cool_table, :a) |> IO.inspect # => [a: 3]
Is there any way that only one instance of {:a, 100}
gets deleted.
Thanks
From the provided API I don’t think so. The documentation says that all instances of the object will be deleted. Hacking you could count the number of instances the table has, then delete and reinsert all but one.
You could count using Enum.count(:ets.match(cool_table, {:a, 100}))
which will return an empty list for each entry matched: [[], []]
, since we don’t care about any values just how many, and then count.
2 Likes