Οι χάρτες είναι μια δομή δεδομένων που περιέχει ζεύγη κλειδιού-τιμής.
Τα κλειδιά μπορούν να είναι οποιουδήποτε τύπου, αλλά πρέπει να είναι μοναδικά.
Οι τιμές μπορούν να είναι οποιουδήποτε τύπου, δεν χρειάζεται να είναι μοναδικές.
Οι χάρτες δεν εγγυώνται τη σειρά του περιεχομένου τους, παρόλο που φαίνεται να το κάνουν.
Οι χάρτες μπορούν να δηλωθούν με μια μορφή literal:
# An empty map
%{}
# A map with the atom key :a associated to the integer value 1
%{a: 1}
# A map with the string key "a" associated to the float value 2.0
%{"a" => 2.0}
# A map with the map key %{} with the list value [1 ,2, 3]
%{%{} => [1, 2, 3]}
# A map with keys of different types
%{:a => 1, "b" => 2}
Οι χάρτες μπορούν επίσης να δημιουργηθούν με τη χρήση του Map.new από το άρθρωμα Map. Αυτό μπορεί να χρησιμοποιηθεί αν έχεις ήδη μια απαριθμήσιμη συλλογή που θέλεις να μετατρέψεις σε λίστα:
kw_list = [a: 1, b: 2]
Map.new(kw_list)
# => %{a: 1, b: 2}
Μπορείς να έχεις πρόσβαση στις τιμές ενός χάρτη με πολλούς διαφορετικούς τρόπους:
my_map = %{key: "value"}
# with a dot if the key is an atom
my_map.key
# => "value"
# with [], a syntax provided by the Access behaviour
my_map[:key]
# => "value"
# with pattern matching
%{key: x} = my_map
x
# => "value"
# with Map.get/2
Map.get(my_map, :key)
# => "value"
Το άρθρωμα Map, που περιλαμβάνεται στην τυπική βιβλιοθήκη, έχει πολλές χρήσιμες συναρτήσεις για τη χρήση χαρτών.
Map.delete(%{a: 2, b: 3}, :a)
# => %{b: 3}
Οι χάρτες υλοποιούν το πρωτόκολλο Enumerable, επιτρέποντας τη χρήση συναρτήσεων του αρθρώματος Enum.
Οι ανώνυμες συναρτήσεις ή οι αναφορές σε συναρτήσεις που έχουν συλληφθεί απαιτούνται συχνά ως ορίσματα για συναρτήσεις του Map και του αρθρώματος Enum.
# Increment the value by one, if it is not found, update it with 0
Map.update(%{a: 1}, :a, 0, &(&1 + 1))
# => %{a: 2}
# Sorting by a specific sub-value
list = [{"A", 4}, {"B", 3}, {"C", 2}, {"D", 1}]
Enum.sort_by(list, &Kernel.elem(&1, 1))
# => [{"D", 1}, {"C", 2}, {"B", 3}, {"A", 4}]