อาร์เรย์ golang

อาร์เรย์คืออะไร

ถ้าคิดไม่ออกให้นึกถึงห้องแถวที่เรียงต่อกัน แต่ละห้องคืออาร์เรย์หนึ่งช่องเอาไว้เก็บของหนึ่งชิ้น และเราจะเริ่มนับห้องแรกเป็นตำแหน่งที่ 0 (ไม่ใช่ 1 นะ) ถ้าเรามีห้องแถวสิบห้อง แสดงว่าเรามีตำแหน่งเก็บของตั้งแต่ 0 ถึงตำแหน่งสุดท้าย…


This content originally appeared on DEV Community and was authored by Anuchit Prasertsang

อาร์เรย์คืออะไร

ถ้าคิดไม่ออกให้นึกถึงห้องแถวที่เรียงต่อกัน แต่ละห้องคืออาร์เรย์หนึ่งช่องเอาไว้เก็บของหนึ่งชิ้น และเราจะเริ่มนับห้องแรกเป็นตำแหน่งที่ 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)
}


This content originally appeared on DEV Community and was authored by Anuchit Prasertsang


Print Share Comment Cite Upload Translate Updates
APA

Anuchit Prasertsang | Sciencx (2021-05-11T05:57:08+00:00) อาร์เรย์ golang. Retrieved from https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/

MLA
" » อาร์เรย์ golang." Anuchit Prasertsang | Sciencx - Tuesday May 11, 2021, https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/
HARVARD
Anuchit Prasertsang | Sciencx Tuesday May 11, 2021 » อาร์เรย์ golang., viewed ,<https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/>
VANCOUVER
Anuchit Prasertsang | Sciencx - » อาร์เรย์ golang. [Internet]. [Accessed ]. Available from: https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/
CHICAGO
" » อาร์เรย์ golang." Anuchit Prasertsang | Sciencx - Accessed . https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/
IEEE
" » อาร์เรย์ golang." Anuchit Prasertsang | Sciencx [Online]. Available: https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/. [Accessed: ]
rf:citation
» อาร์เรย์ golang | Anuchit Prasertsang | Sciencx | https://www.scien.cx/2021/05/11/%e0%b8%ad%e0%b8%b2%e0%b8%a3%e0%b9%8c%e0%b9%80%e0%b8%a3%e0%b8%a2%e0%b9%8c-golang/ |

Please log in to upload a file.




There are no updates yet.
Click the Upload button above to add an update.

You must be logged in to translate posts. Please log in or register.