ตัวแปรชนิด Dictionary

   Dictionary แปลตรงตัวได้ว่า “พจนานุกรม” ครับ ใน Swift เราใช้ตัวแปร Dictionary เก็บค่าของกลุ่ม คำที่ต้องการค้นหา (key) และ คำแปล (value)    ยกตัวอย่างให้เห็นภาพชัดเจนก็เหมือนเราเปิดพจนานุกรมขึ้นมาเพื่อค้นหาความหมายของคำที่เราต้องการ ในการเขียนโปรแกรมประเภท ตรวจสอบเที่ยวบิน หรือ จะเป็น อัตราแลกเปลี่ยนเงิน หรือจะทำโปรแกรมแบบพจนานุกรมเลย ก็ยังได้ครับ

ลักษณะของตัวแปรแบบ Dictionary

Dictionary จะเก็บค่าเป็นกลุ่มของ [Key,Value] จะสังเกตุว่าตัวแปรจะคล้ายๆกับ Array ที่มี [index,element] แต่ข้อแตกต่างกันคือ

-ใน Dictionary เราสามารถกำหนดค่าให้ “Key” ได้ ไม่ว่าจะเป็นข้อความ ( String ) หรือ ตัวเลข ( Integer )

-แต่ใน Array นั้น index จะถูกกำหนดให้เรียงลำดับจาก 0 เสมอ

มาดูตัวอย่างแรก กับวิธีประกาศตัวแปร Dictionary กันครับ

ThaiSwiftClass Dictionary Declaration

ThaiSwiftClass Dictionary Declaration

อธิบาย : ตัวแปรแรกเราประกาศ dcCurrency เป็นตัวแปรชนิด Dictionary ที่มี key เป็น string และ value เป็น string ( <string,string> ) จากนั้นจึงมาใส่ค่าให้ dcCurrency

ตัวแปรที่ 2 : เราได้ประกาศ dcNumber เป็นตัวแปรชนิด Dictionary ที่มี key เป็น Integer และ value เป็น string (แม้ว่าไม่ได้กำหนดไว้ตอนแรก แต่เรากำหนดค่าตั้งต้นไว้ )

ตัวแปรที่ 3 : dcDictionary เป็นตัวแปรชนิด Dictionary ที่เก็บค่า key กับ value เป็น String จะสังเกตุว่าเราสามารถใส่ รูป หรือ Unicode ลงไปได้เลย

ทีนี่มาเรียนรู้คำสั่งพื้นฐานสำหรับตัวแปรชนิด Dictionary กัน

Count หรือ นับจำนวนสมาชิกทั้งหมด

ThaiSwiftClass Dictionary count

ThaiSwiftClass Dictionary count

ผลที่ได้

ThaiSwiftClass Dictionary count result

ThaiSwiftClass Dictionary count result

 

แสดงรายการทั้งหมดใน Dictionary โดยใช้ for in

EX1: dcCurrency

for (key, item) in dcCurrency : ระบบจะมอง ค่าในวงเล็บตัวแรก เก็บ key ตัวที่สองเก็บ value แล้วพิมพ์ผล

ThaiSwiftClass Dictionary dcCurrency all

ThaiSwiftClass Dictionary dcCurrency all

ThaiSwiftClass Dictionary dcCurrency all result

ThaiSwiftClass Dictionary dcCurrency all result

 

EX2: dcDictionary

ThaiSwiftClass Dictionary dcDictionary

ThaiSwiftClass Dictionary dcDictionary

ThaiSwiftClass Dictionary dcDictionary result

ThaiSwiftClass Dictionary dcDictionary result

 

ใช้ for in ดูเฉพาะค่า keys หลัก

ThaiSwiftClass Dictionary dcCurrency key

ThaiSwiftClass Dictionary dcCurrency key

ThaiSwiftClass Dictionary dcCurrency key result

ThaiSwiftClass Dictionary dcCurrency key result

 

การลบรายการทำได้ 3 แบบ

แบบ 1: ลบโดยกำหนด key ให้เป็น nil

ThaiSwiftClass Dictionary set elephant gone

ThaiSwiftClass Dictionary set elephant gone

ThaiSwiftClass Dictionary set elephant gone result

ThaiSwiftClass Dictionary set elephant gone result

 

แบบ 2 : ใช้คำสั่ง removeValueForKey โดยเราต้องกำหนด key ที่ต้องการลบลงไป

ThaiSwiftClass Dictionary delete man

ThaiSwiftClass Dictionary delete man

อธิบาย :เพื่อกันข้อผิดพลาดในการลบผิด key หรืออาจหา key นั้นๆไม่เจอ เราจึงใช้คำสั่ง “if let ” ตามด้วยชื่อตัวแปร “dcRemove” (จะเป็นชื่ออะไรก็ได้) เป็นตัวคอยตรวจสอบว่า ค่า dcDictionary.removeValueForKey (“Man”)  นั้นเป็นจริงหรือไม่ คือค่า “Man” เป็น key จริงหรือไม่

ถ้าจริง ก็จะแสดงผล ถ้าไม่จริงจะขึ้นข้อความว่า “key not found”

ThaiSwiftClass Dictionary delete man value result

ThaiSwiftClass Dictionary delete man value result

ThaiSwiftClass Dictionary delete man list

ThaiSwiftClass Dictionary delete man list

 

แบบที่ 3 : ใช้คำสั่ง removeAll คล้ายกับเรื่อง Array

ThaiSwiftClass Dictionary remove dcNumber

ThaiSwiftClass Dictionary remove dcNumber

ThaiSwiftClass Dictionary remove dcNumber result

ThaiSwiftClass Dictionary remove dcNumber result

 

ค้นหาโดยใช้ key ด้วย if let

ThaiSwiftClass Dictionary get value boy

ThaiSwiftClass Dictionary get value boy

เราใช้ if let เพื่อตรวจสอบว่า key “Boy” นั้นมีอยู่จริงหรือไม่ ถ้ามีให้พิมพ์ค่า value ออกมา ถ้าไม่มี ให้พิมพ์ “Not Found”

ThaiSwiftClass Dictionary get value boy result

ThaiSwiftClass Dictionary get value boy result

 

การเปลี่ยนแปลงค่าภายใน Dictionary

เราจะใช้คำสั่ง updateValue ดูจากตัวอย่าง

ThaiSwiftClass Dictionary update

ThaiSwiftClass Dictionary update

ขั้นตอน 1 : เราต้องการเปลี่ยนข้อมูลใน key “Cat” โดยใช้ if let เพื่อเข้ามาตรวจสอบว่า “Cat” นั้นมีอยู่ใน Dictionary หรือไม่ โดยค่าเก่าจะถูกเก็บไว้ที่ sCatChange ก่อนที่จะถูกค่าใหม่ทับลงไป ถ้าหาไม่เจอให้พิมพ์ “No key found”

ขั้นตอน 2 : เราจะดึงค่าใหม่ของ “Cat” มา โดยต้องตรวจสอบก่อนว่า Key “Cat” มีจริง (ใช้ if let)

ขั้นตอน 3 : แสดงผลออกทางหน้าจอ ซึ่งถ้าไม่เจอ ก็พิมพ์ “Not Found”

ThaiSwiftClass Dictionary update result

ThaiSwiftClass Dictionary update result

แสดงผลสรุปของ dcDictionary จะเห็นว่า “Man” , “Elephant” หายไปแล้ว และรูปแมวใน “Cat” ก็เปลี่ยนไปด้วย

ThaiSwiftClass Dictionary final list result

ThaiSwiftClass Dictionary final list result

ThaiSwiftClass Dictionary dcDictionary Final List

ThaiSwiftClass Dictionary dcDictionary Final List

 

ลองเอา Dictionary ไปฝึกเล่นฝึกใช้ดูนะครับ เพราะโปรแกรมหลายๆตัวเราคงต้องพึ่ง Dictionary ไม่มากก็น้อยครับ
ติดปัญหาหรือมีข้อติชมยังไงส่ง email ได้ที่ thaiswiftclass@gmail.com
หรือทาง facebook https://www.facebook.com/thaiswiftclass