Ma

Maps در Elixir

45 تمرین

درباره‌ی Maps

«نقشه» یک ساختار داده است که جفت‌های کلید-مقدار را نگه می‌دارد.

  • کلیدها می‌توانند از هر نوعی باشند، اما باید یکتا باشند.

  • مقدارها می‌توانند از هر نوعی باشند و لازم نیست یکتا باشند.

  • نقشه ترتیب محتویات خود را تضمین نمی‌کند، هرچند چنین به نظر می‌رسد.

    • پیاده‌سازی زیربنایی آن این تصور اشتباه را ایجاد می‌کند:
  • نقشه را می‌توان با شکل نوشتاری تعریف کرد:

    # 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}]
    
ویرایش از طریق GitHub این پیوند در پنجره یا زبانه‌ی جدیدی باز می‌شود

Maps را یاد بگیرید

تمرین کردن قفل شده است

برای تمرین Maps قفل 10 تمرین دیگر را باز کنید