ข้อมูลแบบ array

จริงๆเรื่องนี้มีในโพสที่แปลหนังสือของพี่พัดแล้วล่ะ แต่ยังไม่ได้ publish แต่มันก็รวมอยู่ในนั้นค่อนข้างเยอะ ผมเลยขอหยิบเอา array ออกมาเป็นอีกโพสแล้วกันเพราะว่าใช้กันบ่อยๆ

array เป็นข้อมูลพื้นฐานสำหรับภาษา Golang ที่ทำหน้าที่เก็บข้อมูลเป็นลำดับของข้อมูลประเภทเดียวกันและกำหนดขนาดหรือจำนวนข้อมูลที่อยู่ภายใน array เอาไว้คงที่ตั้งแต่ต้น เข้าถึงได้โดยใช้หมายเลข index

 

ประเภทข้อมูล array

Golang ใช้ [เลขบอกจำนวนสมาชิก] เอาไว้หน้าชื่อประเภทข้อมูล เพื่อบอกว่าประเภทข้อมูลที่เราต้องการจริงๆคือ array ของข้อมูลนั้น ที่มีจำนวนตามที่กำหนดภายใน [] ซึ่งถ้าจำนวนภายใน [] ต่างกัน ถือว่าเป็นข้อมูลคนละแบบกัน เช่น

[10]int แทน array ของ int จำนวน 10 ตัว

[3]int แทน array ของ int จำนวน 3 ตัว

[5]string แทน array ของ string จำนวน 5 ตัว

[1000]byte แทน array ของ byte จำนวน 1000 ตัว

ส่วนค่าคงที่ของ array จะใช้ { n1, n2, …} ตามหลังประเภทข้อมูลซึ่ง n1, n2 เป็นข้อมูลที่อยู่ภายใน array

 

ตัวอย่างการประกาศตัวแปรเช่น

var list [10]int

pair := [2]int {1,2}

จากตัวอย่าง list และ pair ถือว่าเป็นข้อมูลคนละแบบ เพราะขนาดของ int ไม่เท่ากัน list มี 10 pair มี 2

 

การเข้าถึงข้อมูลใน array

ส่วนการเข้าถึงข้อมูลภายใน array ทีละตำแหน่ง จะใช้เลขจำนวนเต็มบอก index ซึ่งจะเริ่มต้นที่ 0 เช่น

list[0] = 20

list[1] = 30

i = 0

fmt.Println(list[i])

 

ใช้ for range ช่วยวนลูปเข้าถึงข้อมูลภายใน array

เราสามารถใช้ for และ range ช่วยวนลูปเข้าถึง index และค่า ที่อยู่ภายใน array ได้เช่น

for i, v := range list {

}

ซึ่งเมื่อกำหนดค่าแบบ multiple value สองค่า ให้เท่ากับ range ที่ตามด้วยตัวแปร array เช่น range list จะทำให้ตำแหน่งแรกของค่าที่กำหนด คือ i จะได้ค่า index ของ array ในแต่ละรอบ โดยเริ่มที่ 0 และ ตำแหน่งที่สอง v จะได้ค่าข้อมูลภายใน array ในแต่ละรอบ ถ้าเราต้องการใช้แค่ index หรือค่า ให้ใช้ _ แทนชื่อตัวแปรในตำแหน่งนั้นเช่น ต้องการใช้แค่ ค่าใน array ทำได้แบบนี้

for _, v := range list {

}

 

สรุป

จะเห็นว่า array ของ Golang จะคล้ายๆกับ Java และ C แต่ Go เลือกที่จะให้ array เป็นข้อมูลที่ fix ขนาดของจำนวนข้อมูลที่อยู่ภายใน array เท่านั้น เดี๋ยวคราวหน้าเราจะมาดูข้อมูลแบบ slice ที่เอาไว้จัดการ array โดยไม่จำเป็นต้อง fix ขนาดตายตัวกันอีกที

One response

Comments are closed.