ตัวแปรชนิด Array

  บทนี้จะมาเรียนเรื่องการประกาศและใช้ตัวแปรแบบ Array  ก่อนอื่นเราต้องมารู้จักกันก่อนว่า Array คืออะไร มีประโยชน์ยังไงครับ

Array คือการเก็บตัวแปรได้ทีเดียวเป็นกลุ่มๆ ยกตัวอย่างถ้าเราต้องการเก็บรายชื่อนักเรียนทั้งห้อง หรือ รายการสินค้า (Shopping List) หรือรายการที่จะทำในแต่ละวัน (to-do list) โดยจะแบ่งออกเป็นสองส่วนคือ ห้อง (index) และ สมาชิก (Element)

ลองมาดูโครงสร้างและการประกาศตัวแปรแบบ Array กันก่อนครับ

ThaiSwiftClass Array Pic 1
ThaiSwiftClass Array Pic 1

การประกาศตัวแปรแบบ Array เราจะใช้ [  ] ครอบชนิดของตัวแปร เช่น String , Integer , Double หรือ Float หรือเราสามารถระบุค่าที่ต้องการลงไปเลยก็ได้

ดูจากบรรทัดแรก var sTodoList : [String] = []  เราได้ ประกาศตัวแปรชื่อ sTodoList เป็น Array ชนิด ข้อความ (String) แต่ยังไม่มีสมาชิกใดๆอยู่ในนั้น [ ]

บรรทัดที่ 2 : var sShoppingList : [String] = [“Milk”,“Water”,“Rice”,“Noodle”] เราได้ประกาศตัวแปร sShoppingList เป็น Array ชนิดข้อความ (String) โดย กำหนดสมาชิกเป็นสิ่งของในรายการซื้อของเรา “Milk”“Water”“Rice”“Noodle” 

ทั้งสองแบบที่ผ่านมาเป็นการประกาศแบบ Type Safe ที่เรียนมาในบท เขียนโปรแกรมแรกกับ Swift : ตัวแปรและแสดงผล   ส่วนการประกาศในแบบที่ 3 จะเป็นแบบ Type Inference คือไม่กำหนดชนิดให้ชัดเจน แต่ยังไงก็ตาม Swift จะมองค่าที่อยู่ใน Array และจะอนุมานว่าค่าที่อยู่ในตัวแปรหมายถึงชนิดอะไร

บรรทัดที่ 3 : var sMyBelonging = [“Bags”,“Macbook Air”,“Macbook Pro”]

ฉนั้นชนิดของ sMyBelonging จึงเป็น String เพราะสมาชิกในนั้นประกอบด้วยข้อมูลประเภทข้อความ (String)

มาดูโครงสร้างตัวแปรแบบ Array ของ sShoppingList กัน  : ใน Array ค่าลำดับหรือเรียกง่ายๆว่าห้อง (index) จะเริ่มต้นที่ 0 เสมอ และเป็นค่าบ่งชี้ว่า ค่าที่ต้องการ (Element) อยู่ลำดับที่เท่าไร

Index 0 1 2 3 4
Element Milk Water Rice Noodle Eggs

คราวนี้มาดูคำสั่งหลักๆและวิธีใช้ Array กันครับ

คำสั่งที่สำคัญๆสำหรับการใช้งาน Array (เราจะใช้ “.” ต่อท้ายเพื่อดึงคำสั่ง) เช่น

   – การนับจำนวน (Count)

   – เพิ่มจำนวน (Append หรือ Insert)

   – การลบ (Remove)

 

ตัวอย่าง การนับจำนวน (Count) 

ThaiSwiftClass Array Counting
ThaiSwiftClass Array Counting

จากตัวอย่าง : เราจะใช้ “.count” เพื่อนับจำนวนสมาชิกทั้งหมดใน Array ของ  Shopping List และจะแสดงสมาชิกทั้งหมดออกมาทางหน้าจอ

ThaiSwiftClass Array Counting Result
ThaiSwiftClass Array Counting Result

 ผลคือเราได้ จำนวนสมาชิกคือ 5 และ แสดงรายชื่อสมาชิกทั้งหมด (คือรายการสินค้า หรือ Shopping List นั่นเอง)

ทีนี้มาดูวิธีเพิ่มและลดจำนวนสมาชิกใน Array กันต่อ

การเพิ่มจำนวนใน Array

1. แบบใช้คำสั่ง Append

ThaiSwiftClass Array Append
ThaiSwiftClass Array Append

รูปแบบ .append(สมาชิกใหม่ที่ระบุต้องตรงกับชนิดของ Array นั้นๆ)

จากตัวอย่าง : เราได้เพิ่ม Lemon ต่อท้ายสมาชิกที่มีอยู่ ทำให้ตอนนี้รายการซื้อของเรามีทั้งหมดมี 6 ชนิดแล้ว

Index 0 1 2 3 4 5
Element Milk Water Rice Noodle Eggs Lemon
ThaiSwiftClass Array Append Result
ThaiSwiftClass Array Append Result

 

2. แบบใช้คำสั่ง Insert

ThaiSwiftClass Array Insert atindex

รูปแบบ .insert(สมาชิกใหม่ที่ระบุต้องตรงกับชนิดของ Array นั้นๆ , ตำแหน่งของสมาชิกใหม่)

จากตัวอย่าง : เราได้ระบุสมาชิกใหม่ “Orange Juice” ไว้ในลำดับที่ 1 แทนที่ของ “Water” ทำให้ “Water” ย้ายไป index ที่ 2 ผลการทำงานเป็นดังนี้

Index 0 1 2 3 4 5 6
Element Milk OrangeJuice Water Rice Noodle Eggs Lemon
ThaiSwiftClass Array Insert atindex Result
ThaiSwiftClass Array Insert atindex Result

 

ต่อไปมาดูวิธีการลบสมาชิกใน Array บ้าง

การลบข้อมูลใน Array (Remove)

1.แบบใช้คำสั่ง RemoveAtIndex

ThaiSwiftClass Array Remove Index
ThaiSwiftClass Array Remove Index

รูปแบบ .removeAtIndex(ตำแหน่งของสมาชิก) ในตัวอย่างนี้เราทำงานลบตำแหน่งที่ 2 ของสมาชิกคือ “Water” ออกไป ทำให้สมาชิกที่เหลือได้ตำแหน่งใหม่ร่นลงมา

Index 0 1 2 3 4 5
Element Milk OrangeJuice Rice Noodle Eggs Lemon
ThaiSwiftClass Array Remove index Result
ThaiSwiftClass Array Remove index Result

 

2.แบบใช้คำสั่ง RemoveRange

ThaiSwiftClass Array Remove Range
ThaiSwiftClass Array Remove Range

รูปแบบ .removeRange(ช่วงของตำแหน่งที่ต้องการลบ)

จากตัวอย่างเราต้องการลบสมาชิกตั้งแต่ 1-3 ใน Swift เราใช้รูปแบบการเขียนช่วงเป็น “1…3” ลงไป มาดูผลการทำงาน

Index 0 1 2
Element Milk Eggs Lemon
ThaiSwiftClass Array Remove Range Result
ThaiSwiftClass Array Remove Range Result

 

3.แบบใช้คำสั่ง RemoveAll

ThaiSwiftClass Array RemoveAll
ThaiSwiftClass Array RemoveAll

รูปแบบ .removeAll(ต้องการเก็บจำนวนห้องของสมาชิกไว้หรือไม่? true / false)

ในทีนี้การเก็บจำนวนห้องของสมาชิกไว้หรือไม่ขึ้นอยู่กับว่าเราต้องการ reset ตัวแปร Array นั้นทิ้งไปเลยจนไม่เหลือ index อยู่ หรือต้องการคงจำนวนห้องสำหรับสมาชิกไว้ (แต่สมาชิกทั้งหมดจะถูกลบอยู่ดี) โดยถ้าเราต้องการรู้จำนวน index ใน Array นั้นๆจะใช้ .capacity ในการแสดงผลดังกล่าว

จากตัวอย่างเรากำหนด keepCapacity เป็น false คือไม่ต้องการเก็บห้องไว้และทำการลบสมาชิกทั้งหมดออกจาก Array Shopping List

ThaiSwiftClass Array Remove All Result
ThaiSwiftClass Array Remove All Result

 

4. ลบข้อมูลทั้งหมดของ Array ด้วยการตั้งแค่ init

ตัวอย่าง sShoppingList = [] แล้วจะได้ผลดังนี้

ThaiSwiftClass Array Remove All by []
ThaiSwiftClass Array Remove All by []

มาลองดึงข้อมูลจาก Array กันบ้าง    

1.การใช้คำสั่ง For ดึงข้อมูลใน Array

ThaiSwiftClass using For in Array
ThaiSwiftClass using For in Array

จากตัวอย่าง เราใช้คำสั่ง For ที่เรียนรู้มาจากบท Control Flow : Loop (Part 1) เพื่อวิ่งเข้าไปหาข้อมูล index และสมาชิกเพื่อนำมาแสดงผล

รูปแบบ for(เริ่มจาก index 0,ให้วิ่งไปจนถึง index สุดท้าย,ไปทีละ index)

ระบบจะแสดงรายการ index จากค่า iFor และชื่อสมาชิกจาก sMyBelonging[ค่า iFor แทนค่า index เพื่อดึงสมาชิกประจำห้องหรือ index นั้นๆออกมา]

ThaiSwiftClass using For in Array Result
ThaiSwiftClass using For in Array Result

 

2.การใช้คำสั่ง For in ดึงข้อมูลใน Array

ThaiSwiftClass using for in Array
ThaiSwiftClass using for in Array
 จากตัวอย่างเราสามารถใช้คำสั่ง for in เข้าไปดึงค่าสมาชิกออกมาได้เลย โดยใช้ตัวแปร sItem ซึ่งเป็นชนิดเดียวกับสมาชิกใน Array อยู่แล้วแทรกเข้าไปใน sMyBelonging เพื่อดึงผลออกมาแสดง
ThaiSwiftClass using for in for Array Result
ThaiSwiftClass using for in for Array Result

 

ก็จบกันไปสำหรับการใช้ Array เบื้องต้นนะครับ ผมพยายามรวบคำสั่งที่ใช้บ่อยๆมาให้ลองฝึกเขียนกันไปให้คล่องก่อนนะครับ บทต่อไปจะกล่าวถึงตัวแปรอีกประเภทคล้ายๆ Array แต่จะเรียกว่า Dictionary แล้วมันดียังไง อดใจรอไม่นานครับ จะรวบรวมวิธีและตัวอย่างง่ายๆมาให้ลองกัน

แนะนำติชมได้ตลอดที่ thaiswiftclass@gmail.com และทาง https://www.facebook.com/thaiswiftclass

 

 

 

Leave a Reply