อาร์เรย์คืออะไร
ถ้าคิดไม่ออกให้นึกถึงห้องแถวที่เรียงต่อกัน แต่ละห้องคืออาร์เรย์หนึ่งช่องเอาไว้เก็บของหนึ่งชิ้น และเราจะเริ่มนับห้องแรกเป็นตำแหน่งที่ 0 (ไม่ใช่ 1 นะ) ถ้าเรามีห้องแถวสิบห้อง แสดงว่าเรามีตำแหน่งเก็บของตั้งแต่ 0 ถึงตำแหน่งสุดท้ายคือ 9 รวมเป็นสิบตำแหน่ง
การประกาศอาร์เรย์
ตัวแปรอาร์เรย์ในโกใช้วงเล็บก้ามปู [n]type
คล้ายในภาษาส่วนใหญ่
แน่นอนว่าตัวแปรอาร์เรย์ต้องระบุขนาด n
ด้วยว่าจะให้อาร์เรย์มีขนาดเท่าไร
var langs [3]string // อาร์เรย์ langs เก็บของเป็น string ขนาด 3 ช่อง
var ages [5]int // อาร์เรย์ ages เก็บของเป็น int ขนาด 5 ช่อง
ถ้าเรามี type อื่นๆก็สามารถประกาศเป็นอาร์เรย์ได้เหมือนกัน
type User struct {
Name string
Age int
}
ประการอาร์เรย์ของ User
var u [10]User
อาร์เรย์ในโกประกาศแล้วพร้อมใช้งานเลยนะ
อ่านค่าในอาร์เรย์สามารถระบุตำแหน่งที่อยากจะอ่านค่าภายในเครื่องหมาย []
เช่นอยากอ่าน อยากรู้ว่าในห้องแถวห้องแรกเก็บค่าอะไรไว้ (อาร์เรย์ช่องแรก)
var langs [3]string
n := langs[0]
fmt.Printf("ค่าที่เก็บอยู่ในอาร์เรย์ช่องแรกคือ %q\n", n)
อาร์เรย์ในโกจะทำการใส่ค่าเริ่มต้น (zero value) ให้กับอาร์เรย์ทุกช่องโดยอัตโนมัติจึงทำให้อาร์เรย์พร้อมใช้งาน (ค่าเริ่มต้นของ string คือ "" empty string)
ใส่ค่าหรือเปลี่ยนแปลงค่าในอาร์เรย์
langs[0] = "gopher" // เอาคำว่า "gopher" ไปเก็บในอาร์เรย์ช่องที่หนึ่ง
n := langs[0] // อ่านค่าจากอาร์เรย์ช่องที่หนึ่ง
fmt.Printf("ค่าที่เก็บอยู่ในอาร์เรย์ช่องแรกคือ %q\n", n)
กำหนดค่าเริ่มต้นตอนประกาศได้ด้วย
โดยใช้เครื่องหมาย =
แล้วใส่ค่าที่เราต้องการเข้าไป โดยการใส่ชื่อ type แล้วตามด้วย ปีกกา {}
เราสามารถใส่ค่าเข้าไปในปีกกา คั่นด้วย ,
คอมม่า
var langs [3]string
langs = [3]string{"gopher", "Pythonistas", "F#"}
หาขนาดของอาร์เรย์
เราสามารถใช้คำสั่ง len
เพื่อหาขนาดของอาร์เรย์ได้เช่นกัน
l := len(langs)
fmt.Println("อาร์เรย์ langs มีขนาด", l)
สำคัญ
ในโกขนาดของอาร์เรย์ถือว่าเป็นคุณสมบัติของ type ด้วย
หมายความว่าอาร์เรย์ที่เก็บของชนิดเดียวกันแต่คนละขนาดถือว่าเป็นคนละ type กัน
(ซึ่งทำให้ array ใน โก ปลอดภัยในการใช้งานมากๆ) เช่นถ้าเรามีฟังก์ชั่นชื่อว่า Dubnaew (ดับแนว) รับอาร์เรย์ที่เก็บสตริงขนาด 3
func Dubnaew(ns [3]string) {
fmt.Println(ns)
}
langs := [3]string{}
Dubnaew(langs)
cords := [5]string{}
Dubnaew(cords) // compile error : cannot use cords (type [5]string) as type [3]string in argument to Dubnaew
โบนัส
ใช้ for loop กับ array ก็ได้นะ
for i := 0; i < len(langs); i++ { // วนลูปด้วย index (ตำแหน่ง)
val := langs[i]
fmt.Println(val)
}
for i, val := range langs { // วนลูปด้วย for range เอาทั้ง index และ ค่าที่อยู่ใน index นั้น
fmt.Println(i, val)
}
for _, val := range langs { // วนลูปด้วย for range เอาแค่ค่าของแต่ละช่อง
fmt.Println(val)
}
for i := range langs { // วนลูปด้วย for range เอาแค่ index
val := langs[i]
fmt.Println(i, val)
}
Top comments (0)