ใช้ Array แบบ Associate ดีกว่าไหม?
อย่าได้แปลกใจที่ผมจะเขียนอะไรวนไปมาที่ดูแล้วเป็นเรื่อง พื้น(ฐาน)บ้าง เพดานบ้าง ฝาบ้านบ้าง นั่นก็เพราะผมไม่ได้ศึกษา python เป็นภาษาแรกครับ ผมใช้งานมาหลายภาษา และเมื่อมาจับ python ก็ชอบในหลายๆอย่างของมัน เลยมีความคิดจะไปให้สุดด้วยการตั้งเป้าว่า งานใหม่ๆที่ผมพัฒนาจากวันนี้ไปผมจะพยายามทำด้วย python ช่วงนี้จึงเป็นช่วงเปลี่ยนผ่านจากภาษาที่ใช้อยู่เดิมมาสู่ python ครับ และผมเชื่อว่าเหลือเกินว่าอย่างน้อยเป็นหลัก 10 ปีขึ้นไปต่อจากนี้โลกจะใช้ python เยอะขึ้นและใช้อย่างเต็มประสิทธิภาพไม่ยิ่งหย่อนไปกว่าภาษาคอมพิวเตอร์อื่นๆเลย
วันนี้เล่าเรื่องอะไรดี?
ก่อนหน้านี้ในวันสบายๆวันนึง ขณะที่ผมกำลังเล่นบทนายจ้างให้งานเขียนโปรแกรมกับลูกจ้างที่จริงๆแล้วเป็นลูกชาย โดยผลตอบแทนเค้ามีเป้าหมายว่าจะเอาไปซื้อเกมส์ที่อยากได้ ผมให้งานเบาๆด้วยการเขียนโปรแกรมรับข้อมูลไป plot กราฟเส้นหรือ line chart แรกๆผมก็ให้ทำรับค่า x และ y เป็นคู่ๆ 5-6 ชุด เพื่อเอามา plot graph เพียงให้โจทย์แต่ไม่สอนอะไรมาก เพื่อให้เป็นเรื่องท้าทาย เค้าก็ทำได้เนื่องจากปูพื้นไว้ดีพอสมควร แต่เมื่อทำเสร็จสิ่งที่ผมอยากได้ก็ปรากฏขึ้นในหัวเค้าแล้วก็สร้างคำถามยิงมาหาผม "ป๊ะป๋า... ถ้าเราจะต้องสร้างตัวแปรเยอะๆ มันจะต้องคิดชื่อตัวแปรยังไงล่ะทีนี้" จากคำถามนี่รู้เลยว่าเค้ากำหนดตัวแปร x และ y ไว้เป็นคู่ๆตามโจทย์ เช่น x1,y1,x2,y2,....,x5,y5,x6,y6 และเริ่มจะจัดการยาก ผมเลยแนะนำให้ใช้ Array เพราะจัดการเป็นระบบได้ง่ายกว่าและไม่ปวดกบาลพร่ำเพรื่อหากจะมีการเพิ่มค่า x,y อีกหลายๆชุด เพราะมันใช้ร่วมกับ คำสั่งที่ควบคุมการวนรอบอย่าง for และ while ได้
ตัวอย่าง
my_list = ['a', 'b', 'c', 'd', 'e']
print ( my_list[0] )
print ( my_list[2] )
ผลลัพธ์
a
c
และหากต้องการเรียกใช้งานมันทุกตัวเราก็สามารถใช้การวนรอบอย่าง for มาช่วยได้ครับไม่ต้องเรียกมันทีละตัวทุกครั้ง แบบนั้นไม่สนุกหรอก
ตัวอย่าง
my_list = ['a', 'b', 'c', 'd', 'e', 'f', 'g']
for data in my_list :
print ( data )
ผลลัพธ์
a
b
c
d
e
f
g
และที่จริงแล้วผมอยากจะนำเสนอเรื่อง "Associate Array" แปลว่า "อาร์เรย์แบบเชื่อมโยง" แหม! แปลไปแล้วก็ไม่เห็นจะรู้เรื่องเลย เพราะจริงๆแล้วเมื่อใช้งานซับซ้อนจริงๆ เจ้าตัวนี้จะช่วยงานเราได้อย่างมากครับ ตอนแรกผมก็ดันไปคิดว่า python มันมีแต่ list แบบง่ายๆพวกนี้เพราะเว็บไซต์สอนใช้ python หลายแห่งก็นำเสนอแต่แบบนี้ ซึ่งมารู้ทีหลังว่า อ่าว..ก็มี Associate Array นี่นา แต่ทำไมไม่ค่อยมีตัวอย่างการใช้ นึกเหตุผลดีๆขึ้นได้ตอนนี้ก็คือ "ก็แกไม่รู้จักดูให้ดีๆก่อนไงเล้าาาาา" เอาล่ะมาดูเจ้าตัวนี้กัน
Associate Array คืออะไร?
อธิบายความเจ๋งของมันแบบสั้นที่สุดก็คือ "มันเป็นอาร์เรย์แบบก้าวหน้า ที่สามารถตั้งชื่อเฉพาะของแต่ละชิ้นย่อยๆได้นั่นเองครับ" และเมื่อจะใช้งานก็อ้างถึงได้โดยไม่ต้องอิงตัวเลข 0 1 2 3 4 ... แต่อย่าเผลอไปคิดว่าแบบตั้งชื่อได้เนี่ยมันจะดีที่สุดนะครับ เพราะตั้งชื่อแล้วจุดอ่อนก็คือถ้าไม่รู้ชื่อก็เรียกใช้ไม่ได้ซะอีก ดูอย่างตัวอย่างข้างบนสิครับ วนลูปทำทีละชิ้นได้ทั้งหมดเพราะมันมีลำดับ ไม่ต้องรู้ชื่อก็ได้ ดังนั้นเวลาหยิบใช้ก็เลือกให้ดีครับ ซึ่งเจ้า Associate Array นี่เหมาะกับการใช้กับงาน database หรือการสร้าง table มากเพราะจะได้อ้างอิงคอลัมน์ต่างๆของแต่ละบรรทัดโดยไม่ต้องมาจดจำว่ามันอยู่ลำดับที่เท่าไหร่ และหากต่อไปมีการแทรกคอลัมน์จะได้ไม่ต้องไล่แก้โปรแกรมกันปวดสมองเปล่าๆอีกด้วย อ้อ!! เกือบลืมบอกไป เจ้าสิ่งนี้ใน python เค้าเรียก dict ครับ ผมจะเสนอวิธีสร้างไว้สัก 2 แบบพอ มากไปจะมากไป 55+
ตัวอย่าง 1
my_record = dict()
my_record["name"] = "Tony"
my_record["age"] = "50"
my_record["fav_color"] = "Blue"
print( my_record )
print( my_record["name"] )
print( my_record["age"] )
ผลลัพธ์
{'name': 'Tony', 'age': 50, 'fav_color': 'Blue'}
Tony
50
ตัวอย่างที่ 2 ผมไปเอามาจากเว็บ https://python-course.eu/python-tutorial/dictionaries.php ครับลองตามไปดูกันได้ผมว่าวิธีนี้ก็เป็นการสร้างตัวแปรแบบ dict ที่ง่ายๆดี python มักจะประกาศตัวแปรกันง่ายๆอย่างนี้ นี่ก็เป็นอีกความน่าสนใจของมันครับ
ตัวอย่าง 2
city_population = {
"New York City": 8550405,
"Los Angeles": 3971883,
"Toronto": 2731571,
"Chicago": 2720546,
"Houston": 2296224,
"Montreal": 1704694,
"Calgary": 1239220,
"Vancouver": 631486,
"Boston": 667137 }
print ( city_population["Boston"] )
ผลลัพธ์
667137
หากอ่านมาจนจบผมเชื่อว่าคุณจะได้ความรู้เพิ่มเติมบ้างไม่มากก็น้อย และคงจะเห็นด้วยกับผมว่าจะมีบางงานที่เราต้องอ้างอิงด้วยข้อความแบบนี้ได้ง่ายกว่าการอ้างอิงแบบลำดับตามปกติ และใช้มันให้เป็นประโยชน์ได้แน่นอนครับ
เอาล่ะ..ไว้เจอกันใหม่เมื่อมีอะไรมาเล่าครับ สวัสดีครับ