الخرائط بنية بيانات تحمل أزواج مفتاح-قيمة.
يمكن أن تكون المفاتيح من أي نوع، لكن يجب أن تكون فريدة.
يمكن أن تكون القيم من أي نوع، ولا يلزم أن تكون فريدة.
لا تضمن الخرائط ترتيب محتواها على الرغم من أنها تبدو وكأنها تفعل ذلك.
يمكن الإعلان عن الخرائط بصيغة حرفية:
# 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}]