Maps in action part 1 – การใช้งานเบื้องต้น

หนึ่งในโครงสร้างข้อมูลใน computer science คือ hash table เพราะมันเร็วในการค้นหา เพิ่มและลบ Go มี type map ที่ implement hash table มาให้ในตัวเอง

การประกาศและกำหนดค่าเริ่มต้น

type map จะมีหน้าตาแบบนี้

map[KeyType]ValueType

เมื่อ KeyType คือ type ที่สามารถเปรียบเทียบค่าได้ และ ValueType คือ type อะไรก็ได้แม้กระทั่ง map เอง

ตัวอย่างเช่นตัวแปร m เป็นประเภท map ที่มี key เป็นสตริงที่มี int เป็น value

var m map[string]int

map เป็น type แบบอ้างอิง เหมือน pointer หรือ slices ค่าของ m ตอนนี้จะมีค่าเป็น nil ซึ่งค่า nil ของ map จะทำตัวเหมือนค่าเริ่มต้นของ map เมื่อพยายามอ่านค่า แต่จะเกิด panic หากพยายามเขียนค่าไปที่ nil map

ในการกำหนดค่าเริ่มต้นให้ map ทำได้โดยใช้ฟังก์ชั่น make

m = make(map[string]int)

ฟังก์ชั่น make จะทำการจองและกำหนดค่าเริ่มต้น และคืนค่า map กลับมาให้

การทำงานร่วมกับ maps

Go กำหนด syntax มาให้ในตัวเอง ตัวอย่างเช่น ต้องการ set ค่า “route” ให้มีค่า 66

m["route"] = 66

หากต้องการอ่านค่าในคีย์ “route” ใส่ในตัวแปร i ทำได้โดย

i := m["route"]

หากอ่านค่าจากคีย์ที่ไม่มีอยู่ Go จะคืนค่า zero กลับมาให้ ซึ่งในตัวอย่าง m มี value type เป็น int จะคืนค่า 0 กลับไปให้

j := m["root"]
// j == 0

ฟังก์ชั่น len จะคืนจำนวน items ใน map กลับมาให้

n := len(m)

 

หากต้องการลบคีย์ออกจาก map ทำได้โดยใช้ฟังก์ชั่น delete

delete(m, "route")

ซึ่งฟังก์ชั่น delete จะไม่คืนค่ากลับมาและจะไม่ทำอะไรหาคีย์ที่ใช้ลบไม่มีอยู่ใน maps

และเรายังสามารถรับค่าแบบสองค่าได้ด้วยเพื่อใช้ในการทดสอบว่าคีย์มีอยู่จริงหรือไม่

i, ok := m["route"]

โดยค่า (i) คือค่าที่เก็บในคีย์ “route” หากไม่มีคีย์นี้อยู่ maps จะคืนค่า zero (0) กลับมาให้ และ (ok) จะเป็น type bool ซึ่งจะมีค่าเป็น true หากใน maps นั้นมีคีย์ “route” อยู่ และ false ถ้าไม่มี

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

_, ok := m["route"]

หากต้องการวนลูปนำ key และ value ของ maps ออกมาโดยใช้ range keyword

for key, value := range m {
    fmt.Println("Key:", key, "Value:", value)
}

เท่านี้เราคงพอเห็นภาพของการนำ maps ไปใช้งานคร่าวๆ แล้ว

ที่มา https://blog.golang.org/go-maps-in-action