รายการเชื่อมโยง (Alists)
รายการการเชื่อมโยง (หรือ รายการ) เป็นโครงสร้างข้อมูลพื้นฐานในโครงการที่ใช้เพื่อแสดงคอลเลกชันของคู่คีย์-ค่า มันถูกนำไปใช้เป็นรายการคู่ โดยที่แต่ละคู่เชื่อมโยงคีย์ (โดยทั่วไปคือสัญลักษณ์) กับค่า รายการมีความเรียบง่าย ยืดหยุ่น และเหมาะสำหรับชุดข้อมูลขนาดเล็กถึงขนาดกลาง
โครงสร้างรายชื่อสมาคม
อลิสต์คือรายการที่แต่ละองค์ประกอบเป็น คู่ (สร้างด้วย cons) แต่ละคู่ประกอบด้วย:
- คีย์: องค์ประกอบแรก (โดยทั่วไปจะเป็นสัญลักษณ์)
- ค่า: องค์ประกอบที่ 2 ซึ่งอาจเป็นข้อมูลประเภทใดก็ได้
(define alist '((name . "Alice") (age . 30) (city . "Paris")))- คีย์:
'name,'age,'city - มูลค่า:
"Alice",30,"Paris" - โครงสร้าง: รายการคู่:
((name . "Alice") (age . 30) (city . "Paris"))
การสร้าง Alist
คุณสามารถสร้างรายการได้โดยการสร้างคู่ด้วยตนเองหรือสร้างโดยทางโปรแกรมโดยใช้ cons
การใช้คำพูดเดี่ยว (')
เครื่องหมายคำพูดเดี่ยว (') เป็นการย่อสำหรับ quoting ซึ่งทำให้ Scheme ไม่สามารถประเมินนิพจน์ได้ ทำให้เหมาะอย่างยิ่งสำหรับการสร้างรายการคงที่โดยที่คีย์และค่าทั้งหมดเป็นแบบฮาร์ดโค้ด
;; กำหนด alist ด้วยตนเอง
(define alist '((name . "Alice") (age . 30) (city . "Paris")))
;; เพิ่มคู่ใหม่แบบโปรแกรม
(define updated-alist (cons '(country . "France") alist))ผลลัพธ์:
((country . "France") (name . "Alice") (age . 30) (city . "Paris"))
การใช้ backquote (`) และเครื่องหมายจุลภค (,)
ตัวดำเนินการ backquote (`) คล้าย single quote แต่ช่วยให้แทรกนิพจน์ที่ประเมินแล้วได้แบบไดนามิกด้วย comma (,) สิ่งนี้มีประโยชน์สำหรับการสร้างรายการที่มีการคำนวณคีย์หรือค่าขณะรันไทม์
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))ผลลัพธ์:
((name . "Alice") (age . 30) (city . "Paris"))
ตัวอย่างการเปรียบเทียบ
รายการคงที่โดยใช้ ':
(define alist '((name . "Alice") (age . 30) (city . "Paris")))รายการแบบไดนามิกโดยใช้ ` และ ,:
(define key 'name)
(define value "Alice")
(define alist `((,key . ,value) (age . 30) (city . "Paris")))การเข้าถึงข้อมูลใน Alist
หากต้องการดึงค่าจากรายการ คุณสามารถใช้ฟังก์ชัน assoc ซึ่งจะค้นหาคู่ด้วยคีย์
(assoc 'name alist) ; คืนค่า (name . "Alice")
(assoc 'country alist) ; คืนค่า #f (ไม่พบคีย์)การแยกคุณค่า
เมื่อคุณดึงข้อมูลคู่โดยใช้ assoc ให้ใช้ cdr เพื่อแยกค่า:
(cdr (assoc 'name alist)) ; คืนค่า "Alice"สรุปคุณสมบัติที่สำคัญ
- Single Quote (
'): สร้างรายการคงที่โดยที่องค์ประกอบทั้งหมดเป็นข้อมูลตามตัวอักษร - Backquote (
`): ช่วยให้สร้าง alist แบบไดนามิกได้โดยผสมองค์ประกอบคงที่กับนิพจน์ที่ประเมินแล้ว (ใช้,) - Dot Notation (
.): ใช้เพื่อสร้างคู่ เชื่อมโยงคีย์กับค่าในรายการ