วันพฤหัสบดีที่ 30 พฤศจิกายน พ.ศ. 2560

ตอนที่ 6 อาเรย์หลายมิติ

ไม่มีความคิดเห็น

ตอนที่ 6 อาเรย์หลายมิติ


อาเรย์ที่ใช้โดยปกติแล้วจะเป็นแบบมิติเดียว คือตารางจะเป็นแบบแนวยาวออกมา และเพิ่มได้เฉพาะแถว แต่หากเป็นอาเรย์ที่มีหลายมิติ จะเพิ่มข้อมูลที่นำมาลงตารางได้ทั้งแถว และคอลั่ม

อาเรย์ 2 มิติ

อาเรย์ 2 มิติ เป็นอาเรย์ที่จะใช้ลำดับในการอ้างอิง 2 ตัว โดยที่ตัวหนึ่งเป็นตัวหลัก เปรียบได้กับเป็นแถวในตาราง และอีกตัวเป็นคอลั่ม ดังนั้นหากเราต้องการที่จะดึงข้อมูลออกมาจากอาเรย์ เราจะต้องรู้ว่าข้อมูลนั้นๆอยู่แถวที่เท่าไหร่ และอยู่คอลั่มที่เท่าไหร่
ตัวอย่างเช่น การเปรียบเทียบราคาของซีพียูอินเทลรุ่นหนึ่งในแต่ละร้าน และแต่ละปี จะนำข้อมูลมาเขียนเป็นตารางง่ายๆดังนี้
ปี / ชื่อร้านร้านนาย ก.ร้านนาย ข.ร้านนาย ค.ร้านนาย ง.
20123,1002,9903,1203,000
20133,0002,9003,0003,100
20142,9002,9103,0003,000
20152,0002,0002,0002,000
จากตาราง จะเห็นว่าอาเรย์มิติเดียวไม่สามารถเก็บข้อมูลที่มีจำนวนมากได้ จึงจำเป็นต้องใช้อาเรย์แบบ 2 มิติ ในเก็บข้อมูล ซึ่งข้อมูลจะถูกนำไปเก็บในอาเรย์ได้ จะป็นดังนี้
int price[4][5] = {
{2012, 3100, 2990, 3120, 3000}, 
{2013, 3000, 2900, 3000, 3100}, 
{2014, 2900, 2910, 3000, 3000}, 
{2015, 2000, 2000, 2000, 2000}
};
จะเห็นว่าการประกาศตัวแปรเริ่มต้น ยังเป็นรูปแบบ TYPE NAME[SIZE] อยู่ แต่มีการเพิ่มมิติเพิ่มขึ้นมา ทำให้ได้ออกมาเป็น TYPE NAME[SIZE1][SIZE2] แล้วจึงกำหนดค่า
จากโค้ดจะเห็นว่าผมได้กำหนขนาดของมิติแรกเป็น 4 เพราะในตารางมีข้อมูลทั้งหมด 4 ปีด้วยกัน คือปี 2012 2013 2014 และ 2015 ในมิติที่ 2 ได้กำหนดไว้ว่าจะมีข้อมูลย่อยอีก 5 ตัว ในรูปแบบของ ปี, ราคาร้านนาย ก., ราคาร้านนาย ข., ราคาร้านนาย ค., ราคาร้านนาย ง. เมื่อนำโค้ดด้านบนมาใส่ลงในตาราง จะได้เป็น
priceprice[x][0]price[x][1]price[x][2]price[x][3]price[x][4]
price[0][y]20123,1002,9903,1203,000
price[1][y]20133,0002,9003,0003,100
price[2][y]20142,9002,9103,0003,000
price[3][y]20152,0002,0002,0002,000
จะเห็นว่าตารางแรกจะแตกต่างจากตารางนี้ เพราะว่าเราไม่สามารถนำปี มาใช้เป็น Key ที่ใช้กำหนดลำดับของอาเรย์ได้ จึงต้องนำปีไปรวมกับข้อมูลของร้านนั้นๆ

การอ่านข้อมูลอาเรย์ 2 มิติ

จากที่ได้กล่าวไปข้างต้นนั้น เราจำเป็นที่จะต้องรู้ลำดับ หรือ Key ของอาเรย์เสียก่อน จึงจะสามารถนำค่าออกมาได้ ตัวอย่างหากผมต้องการดึงว่าตอนปี 2014 ของร้านนาย ค. ได้ขายซีพียูในราคาเท่าไหร่ ซึ่งหากเราพิจารณาจากตาราง จะพบว่าเราจะต้องดึงออกมาจากลำดับที่ 2,3 เพราะในปี 2014 มีข้อมูลอยู่ลำดับ หรือ Key ที่ 2 แล้วร้านนาย ค. อยู่ลำดับ หรือ Key ที่ 3 ดังนั้นหากจะดึงข้อมูลออกมา ก็สามารถทำได้ง่ายๆ ดังนี้
int val = price[2][3];
จากโค้ดจะเห็นว่าได้มีการดึงข้อมูลจากอาเรย์ในมิติแรกลำดับที่ 2 และในมิติที่สอง ลำดับที่ 3 แล้วจึงนำค่าที่ได้มาเก็บไว้ในตัวแปรชนิด int ชื่อตัวแปร val

การเซ็ตตัวแปรอาเรย์ 2 มิติ

การเซ็ตตัวแปรอาเรย์ 2 มิติ จะคล้ายๆกับการเซ็ตค่าของตัวแปรปกติ เพียงแต่จะต้องระบุลำดับของข้อมูลที่ต้องการแก้ไขในแต่ละมิติด้วย
price[2][3] = 2900;
อาเรย์หลายมิติ
อาเรย์แบบหลายมิติจะใช้เมื่อมีกลุ่มข้อมูลชนิดเดียวกันจำนวนมาก และใช้แค่ 2 มิติยังไม่พอ หากยังนึกภาพไม่ออกว่าอาเรย์หลายมิติมีรูปแบบอย่างไร ก็ให้นึกถึงกระดาษที่มีข้อมูลคล้ายๆกับอยู่วางซ้อนทับกันอยู่ ที่การจะนำข้อมูลจำนวนมากไปวางลงในกระดาษแผ่นเดียวนั้นไม่พอ จึงต้องมีการใช้กระดาษหลายแผ่น เมื่อนำมาวางซ้อนกัน จะทำให้เห็นภาพว่ามิติที่ 3 คืออะไร
* วิทยาศาสตร์อธิบายไว้ง่ายๆว่า หากเราระบุข้อมูลของอะไรก็ตามได้ 1 ตัว นั่นหมายถึงสิ่งนั้นมี 1 มิติ หากระบุได้ด้วย 2 ตัวเลข เช่นรูปสี่เหลี่ยม จะเป็น 2 มิติ แต่หากเป็นรูปทรงลูกบาศก์ ซึ่งจะเป็น 3 มิติ เนื่องจากระบุรายละเอียดได้ด้วย 3 ตัวเลข
การประกาศเป็นตัวแปรอาเรย์หลายมิติ จะเหมือนกับรูป 2 มิติ คือใช้เครื่องหมาย [] ในการระบุขนาดของมิติที่ 3 เพิ่มขึ้นมา เช่น
int price[10][2][2];
ส่วนการเรียกใช้ก็เช่นเดียวกัน คือ
int val = price[0][0][0];

ไม่มีความคิดเห็น :

แสดงความคิดเห็น