DualMap

A DualMap is simply a dual-entry map struct that allows you to reference pairs of data using both, a key or a value. In a DualMap you can look up a value from its key or a key from its value.

In simple terms we could say that a DualMap is a map where there is no difference between key and value, both can be either one or the other.

How does it work?

A DualMap actually stores 2 maps, a direct one with the key => value pairs, and a reverse one with the value => key pairs. At the same time it also stores metadata about the names (ids) of the datas (called master keys).

To create a new DualMap you must use the DualMap.new function. You must pass to it a pair of names that will be the identifiers of the master keys.

DualMap.new(:hostname, :ip)

The order of the master keys is important. If you later want to make insertions into the DualMap and you use the DualMap.put_ordered function the value pairs will assume that they are ordered as defined at the time of creating the DualMap with DualMap.new.

Let's see some examples:

iex> dm = DualMap.new(:hostname, :ip)
[]
iex> DualMap.put_ordered(dm, [
{"ns3", "192.168.0.4"},
{"ns2", "192.168.0.3"},
{"ns1", "192.168.0.2"}
])
[
{"ns1", "192.168.0.2"},
{"ns2", "192.168.0.3"},
{"ns3", "192.168.0.4"}
]
iex> DualMap.delete(dm, :ip, "192.168.0.3")
[
{"ns1", "192.168.0.2"},
{"ns3", "192.168.0.4"}
]

Full docs

For full documentation follow the link doc

Installation

def deps do
[
{:dual_map, "~> 0.1.0"}
]
end