Elixir - แผนที่

รายการคำหลักเป็นวิธีที่สะดวกในการจัดการเนื้อหาที่จัดเก็บในรายการตามคีย์ แต่ภายใต้ Elixir ยังคงดำเนินการตามรายการ สิ่งนี้อาจเหมาะสมหากคุณมีแผนอื่น ๆ สำหรับรายการนั้นที่ต้องดำเนินการทั้งหมด แต่อาจเป็นค่าใช้จ่ายที่ไม่จำเป็นหากคุณวางแผนที่จะใช้คีย์เป็นแนวทางเดียวในการเข้าถึงข้อมูล

นี่คือจุดที่แผนที่ช่วยคุณได้ เมื่อใดก็ตามที่คุณต้องการที่เก็บคีย์ - ค่าแผนที่คือโครงสร้างข้อมูล“ ไปที่” ใน Elixir

การสร้างแผนที่

แผนที่ถูกสร้างขึ้นโดยใช้ไวยากรณ์% {} -

map = %{:a => 1, 2 => :b}

เมื่อเทียบกับรายการคำหลักเราจะเห็นความแตกต่างสองประการ -

  • แผนที่อนุญาตให้มีค่าใด ๆ เป็นกุญแจสำคัญ
  • คีย์ของแผนที่ไม่เป็นไปตามลำดับใด ๆ

การเข้าถึงคีย์

ในการรับค่าที่เชื่อมโยงกับคีย์ Maps จะใช้ไวยากรณ์เดียวกับรายการคำหลัก -

map = %{:a => 1, 2 => :b}
IO.puts(map[:a])
IO.puts(map[2])

เมื่อรันโปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -

1
b

การใส่คีย์

ในการแทรกคีย์ในแผนที่เราใช้ไฟล์ Dict.put_new ฟังก์ชันที่ใช้แผนที่คีย์ใหม่และค่าใหม่เป็นอาร์กิวเมนต์ -

map = %{:a => 1, 2 => :b}
new_map = Dict.put_new(map, :new_val, "value") 
IO.puts(new_map[:new_val])

สิ่งนี้จะแทรกคู่คีย์ - ค่า :new_val - "value"ในแผนที่ใหม่ เมื่อรันโปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -

"value"

การอัปเดตค่า

ในการอัปเดตค่าที่มีอยู่แล้วในแผนที่คุณสามารถใช้ไวยากรณ์ต่อไปนี้ -

map = %{:a => 1, 2 => :b}
new_map = %{ map | a: 25}
IO.puts(new_map[:a])

เมื่อรันโปรแกรมข้างต้นจะสร้างผลลัพธ์ต่อไปนี้ -

25

การจับคู่รูปแบบ

ในทางตรงกันข้ามกับรายการคำหลักแผนที่มีประโยชน์มากในการจับคู่รูปแบบ เมื่อใช้แผนที่ในรูปแบบแผนที่จะจับคู่กับชุดย่อยของค่าที่กำหนดเสมอ -

%{:a => a} = %{:a => 1, 2 => :b}
IO.puts(a)

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -

1

สิ่งนี้จะตรงกัน a ด้วย 1. และด้วยเหตุนี้มันจะสร้างผลลัพธ์เป็น1.

ดังที่แสดงไว้ด้านบนแผนที่จะจับคู่ตราบเท่าที่มีคีย์ในรูปแบบอยู่ในแผนที่ที่กำหนด ดังนั้นแผนที่ว่างจะตรงกับแผนที่ทั้งหมด

สามารถใช้ตัวแปรเมื่อเข้าถึงจับคู่และเพิ่มคีย์แผนที่ -

n = 1
map = %{n => :one}
%{^n => :one} = %{1 => :one, 2 => :two, 3 => :three}

โมดูลแผนที่มี API ที่คล้ายกันมากกับโมดูลคำหลักพร้อมฟังก์ชันอำนวยความสะดวกในการจัดการแผนที่ คุณสามารถใช้ฟังก์ชันต่างๆเช่นไฟล์Map.get, Map.deleteเพื่อจัดการแผนที่

แผนที่ด้วยปุ่ม Atom

แผนที่มาพร้อมกับคุณสมบัติที่น่าสนใจบางประการ เมื่อคีย์ทั้งหมดในแผนที่เป็นอะตอมคุณสามารถใช้ไวยากรณ์คำหลักเพื่อความสะดวก -

map = %{:a => 1, 2 => :b} 
IO.puts(map.a)

คุณสมบัติที่น่าสนใจอีกประการหนึ่งของแผนที่คือมีไวยากรณ์ของตัวเองสำหรับการอัปเดตและเข้าถึงคีย์อะตอม -

map = %{:a => 1, 2 => :b}
IO.puts(map.a)

โปรแกรมข้างต้นสร้างผลลัพธ์ต่อไปนี้ -

1

โปรดทราบว่าในการเข้าถึงคีย์อะตอมด้วยวิธีนี้ควรมีอยู่มิฉะนั้นโปรแกรมจะไม่สามารถทำงานได้