Go:
การใช้แอเรย์สมาชิก
วิธีการ:
การสร้างและเริ่มต้นใช้งานแมพใน Go สามารถทำได้หลายวิธี นี่คือตัวอย่างพื้นฐานเพื่อให้คุณเริ่มต้น:
package main
import "fmt"
func main() {
// การประกาศและเริ่มใช้งานแมพ
colors := map[string]string{
"red": "#FF0000",
"green": "#00FF00",
"blue": "#0000FF",
}
fmt.Println(colors)
// Output: map[blue:#0000FF green:#00FF00 red:#FF0000]
}
เพื่อเพิ่มหรืออัปเดตองค์ประกอบ, คุณกำหนดค่าให้กับกุญแจเช่นนี้:
colors["white"] = "#FFFFFF"
fmt.Println(colors)
// Output: map[blue:#0000FF green:#00FF00 red:#FF0000 white:#FFFFFF]
การเข้าถึงค่าด้วยกุญแจของมันเป็นเรื่องง่าย:
fmt.Println("โค้ดสีหกเลขสำหรับสีแดงคือ:", colors["red"])
// Output: โค้ดสีหกเลขสำหรับสีแดงคือ: #FF0000
เพื่อลบองค์ประกอบออก, ใช้ฟังก์ชัน delete
:
delete(colors, "red")
fmt.Println(colors)
// Output: map[blue:#0000FF green:#00FF00 white:#FFFFFF]
การวนซ้ำผ่านแมพทำได้โดยใช้ลูป for:
for color, hex := range colors {
fmt.Printf("Key: %s Value: %s\n", color, hex)
}
จำไว้ว่า, แมพใน Go เป็นไม่มีการเรียงลำดับ ลำดับของการวนซ้ำไม่ได้รับการรับประกัน
ศึกษาลึกซึ้ง
ใน Go, แมพถูกดำเนินการเป็นตารางแฮช แต่ละรายการในแมพประกอบด้วยสองสิ่ง: กุญแจและค่า กุญแจถูกแฮชเพื่อเก็บรายการ, ซึ่งช่วยให้การดำเนินการใช้เวลาคงที่สำหรับชุดข้อมูลขนาดเล็กและความซับซ้อนเฉลี่ยของเวลา O(1) ด้วยการแฮชที่เหมาะสม, ซึ่งอาจเสื่อมสภาพเป็น O(n) ในกรณีที่แย่ที่สุดด้วยการชนของแฮชมากมาย
หมายเหตุสำคัญสำหรับโปรแกรมเมอร์ Go ใหม่คือประเภทแมพเป็นประเภทอ้างอิง นี้หมายความว่าเมื่อคุณผ่านแมพไปยังฟังก์ชัน การเปลี่ยนแปลงใด ๆ ที่ทำกับแมพภายในฟังก์ชันนั้นสามารถมองเห็นได้จากผู้เรียก นี่เป็นความแตกต่างจาก เช่น, การส่งโครงสร้างไปยังฟังก์ชัน, ซึ่งโครงสร้างจะถูกคัดลอกเว้นเสียแต่ว่าจะส่งโดยพอยน์เตอร์
ในขณะที่แมพนั้นมีความยืดหยุ่นและมีประสิทธิภาพสำหรับกรณีการใช้งานส่วนใหญ่ที่เกี่ยวข้องกับแอสโซซิเอทีฟอาร์เรย์, ในแอพพลิเคชั่นที่มีความต้องการประสิทธิภาพสูง อาจเป็นประโยชน์ที่จะใช้โครงสร้างข้อมูลที่มีลักษณะประสิทธิภาพที่สามารถคาดการณ์ได้มากขึ้นโดยเฉพาะเมื่อการกระจายกุญแจอาจทำให้เกิดการชนกันบ่อยครั้ง
ทางเลือกอื่นที่ควรพิจารณาคือ sync.Map
, ซึ่งมีตั้งแต่ Go 1.9, ออกแบบมาสำหรับกรณีการใช้งานที่กุญแจถูกเขียนเพียงครั้งเดียวแต่ถูกอ่านหลายครั้ง, ซึ่งให้การปรับปรุงความมีประสิทธิภาพในสถานการณ์เหล่านี้ อย่างไรก็ตาม, สำหรับแอพพลิเคชั่น Go ทั่วไป, การใช้งานแมพแบบปกติถือเป็นสิ่งที่ถูกต้องตามไวยากรณ์และมักเป็นวิธีที่แนะนำสำหรับความเรียบง่ายและการสนับสนุนโดยตรงในภาษา