Slice หมู!

ข้อมูลแบบ slice

จากคราวก่อนที่บอกว่า array นั้นเป็นข้อมูลที่กำหนดขนาดชัดเจน array ที่มีขนาดต่างกัน ถือว่าเป็นข้อมูลคนละประเภทกันเลย เช่น
var a [5]int
var b [10]int
ถือว่า a และ b เป็นข้อมูลคนละแบบ a เป็น array ของ int ขนาด 5 ตัว และ b เป็น array ของ int ขนาด 10 ตัว
ทีนี้ ถ้าเราต้องการจัดการ array ที่มีขนาดต่างๆกัน เราจะทำอย่างไร สำหรับ Go ได้สร้างข้อมูลอีกประเภทขึ้นมาเลยคือ slice นั่นเอง

การประกาศตัวแปรของ slice
การประกาศตัวแปรของ slice ทำได้เกือบเหมือน array ต่างกันตรงไม่ต้องกำหนดขนาดนั่นเอง เช่น
var a []int
var b []int
slice เป็นประเภทข้อมูลที่เอามาจัดการ array อีกที นั่นคือโครงสร้างภายในของ slice เป็น array นั่นเอง เราสามารถสร้าง array ให้กับ slice ได้สองแบบ แบบแรกคือใช้ keyword make อีกแบบคือใช้ operator [start : end] โดย start และ end เป็นตัวเลข index เริ่มต้น และ สิ้นสุด เพื่อช่วยตัดข้อมูลภายใน array ซึ่งเรามากเรียกเป็นคำกิริยากันว่า ทำการ slice ขอมูลของ array นั่นเอง นั่นละคือที่มาของคำว่าประเภทข้อมูลแบบ slice
ตัวอย่างการใช้ operator slice [:] เช่น
var list [5]int = [5]int {1, 2, 3, 4, 5}
var s []int = list[1:3]
ข้อมูลที่ slice s มีคือ 2,3 นั่นเอง
นอกจากจะกำหนดเริ่มต้นและสิ้นสุด การ slice ยังสามารถกำหนดแค่จุดเริ่มต้น หรือสิ้นสุดได้เหมือนกัน เช่น
var s []int = list[3:]
ข้อมูลที่ slice s มีคือ 4,5
var s []int = list[:3]
ข้อมูลที่ slice s มีคือ 1,2,3

ค่าคงที่ slice
นอกจากจะสร้างข้อมูลแบบ slice ด้วยการใช้ slice operator [:] แล้ว เรายังกำหนดค่าเริ่มต้นด้วยค่าคงที่ของ slice ได้เช่นกันซึ่งทำได้เหมือน array แค่ไม่กำหนดขนาด เช่น
var a []int = []int {10, 20, 30}

สร้าง slice โดยใช้ keyword make
สุดท้ายเราสามารถสร้าง slice ได้จาก keyword make ซึ่งจะทำการจองหน่วยความจำและกำหนด array ภายในของ slice ให้ ตัวอย่างเช่น
var s []int = make([]int, 5)
จะทำการสร้าง slice ขนาด 5 ซึ่งค่าทั้ง 5 ของ slice จะเป็นค่า zero value (ค่า default) ของ type นั้น เช่น int คือ 0
อีกแบบคือ
var s []int = make([]int,5,10)
เป็นการกำหนดทั้งขนาดของ slice และ ขนาดของ array ภายใน โดยขนาดเป็น 5 และ ขนาดของ array ภายในเป็น 10 เรื่องนี้เดี๋ยวลงรายละเอียดกันอีกทีในเรื่อง ขนาดของ slice และ array คงแยกออกเป็นอีกโพสต์ไปเลย
การอ้างอิงตำแหน่ง และ การวนลูปของ slice
ง่ายๆเลยคือ เหมือนกับ array เลยครับ 

ไม่ยากใช่มั้ยละน้องๆครับ วันนี้พี่บอสลาไปก่อน ขอให้มีความสุขสนุกกับภาษา Go นะคร้าบบบบบ

ความคิดเห็น

โพสต์ยอดนิยมจากบล็อกนี้

Go ดีกว่า C++ หรือ Python อย่างไร ?

Go ไม่มี class และ object แต่ทำไมถึงมี Method และ Interface !?

ประวัติความเป็นมาของภาษา Go