Haskell:
การใช้แอเรย์สมาชิก

วิธีการ:

Haskell ไม่มีอาร์เรย์แอสโซซีเอทีฟในตัวเช่นเดียวกับบางภาษาอื่น ๆ แต่มันมีไลบรารีมาตรฐานที่ทรงพลังชื่อ Data.Map สำหรับการทำงานกับคู่คีย์-ค่า มาเริ่มดูวิธีการใช้งานกันเถอะ!

ก่อนอื่น ต้องมั่นใจว่าได้นำเข้ามัน:

import qualified Data.Map as Map

การสร้างแมพนั้นทำได้อย่างง่ายดาย มาสร้างหนึ่งอันที่มีภาษาโปรแกรมและพาราไดซ์ของมัน:

let languages = Map.fromList [("Haskell", "Functional"), ("Python", "Imperative"), ("Prolog", "Logical")]

ตอนนี้ ถ้าเราอยากทราบพาราไดซ์ของ Haskell?

Map.lookup "Haskell" languages
-- output: Just "Functional"

เพิ่มภาษาใหม่นั้นง่ายมาก:

let languagesUpdated = Map.insert "Rust" "Systems" languages

ถ้าเราอยากจะแสดงภาษาทั้งหมดล่ะ? ใช้ Map.keys:

Map.keys languagesUpdated
-- output: ["Haskell","Python","Prolog","Rust"]

เพื่อแสดงพาราไดซ์ ใช้ Map.elems:

Map.elems languagesUpdated
-- output: ["Functional","Imperative","Logical","Systems"]

การดำเนินการพื้นฐานเหล่านี้ควรจะครอบคลุมการใช้งานส่วนใหญ่ แต่ยังมีอีกมากที่จะสำรวจใน Data.Map!

ดำดิ่งลึก

โมดูล Data.Map ในไลบรารีมาตรฐานของ Haskell สร้างขึ้นมาจากต้นไม้ทวิภาคีที่สมดุล โดยเฉพาะ AVL trees การเลือกใช้นี้รับประกันว่าการดำเนินการส่วนใหญ่บนแมพ เช่น การใส่ เอาออก และการค้นหา สามารถทำได้ในเวลา O(log n) โดยที่ n คือจำนวนองค์ประกอบในแมพ เป็นตัวเลือกที่มีประสิทธิภาพสำหรับหลาย ๆ กรณีการใช้งาน แม้อาจจะไม่เร็วที่สุดสำหรับทุกสถานการณ์

มีเรื่องประวัติศาสตร์เล็กน้อยด้วยเช่นกัน: ก่อนที่ Data.Map จะกลายเป็นที่นิยม Haskell โปรแกรมเมอร์มักใช้รายการของคู่เพื่อจำลองอะเรย์แอสโซซีเอทีฟ อย่างไรก็ตาม การดำเนินการบนโครงสร้างเช่นนี้มี O(n) สำหรับการค้นหา ทำให้ Data.Map เป็นการปรับปรุงที่มีความหมายมากในแง่ของประสิทธิภาพ

ตอนนี้ แม้ว่า Data.Map จะมีประสิทธิภาพและประโยชน์ใช้สอย มันก็ไม่ใช่เครื่องมือที่ดีที่สุดสำหรับทุกงานเสมอไป สำหรับงานที่มีความไวต่อประสิทธิภาพอย่างสูง ที่เวลาการค้นหาแม้แต่ O(log n) ยังช้าเกินไป หรือที่คีย์เป็นค่าจำนวนเต็มเสมอ อาร์เรย์หรือตารางแฮช (ผ่าน Data.HashMap) อาจมอบประสิทธิภาพที่ดียิ่งขึ้นด้วยเวลาการเข้าถึง O(1)

ระบบนิเวศของ Haskell อนุญาตให้มีโครงสร้างข้อมูลหลายอย่างเพื่อให้เหมาะกับความต้องการต่าง ๆ และ Data.Map เป็นตัวเลือกที่ยอดเยี่ยมสำหรับอาร์เรย์แอสโซซีเอทีฟทั่วไป ที่สมดุลระหว่างความสะดวกในการใช้งาน ความยืดหยุ่น และประสิทธิภาพ