อาร์เรย์ (Array)
อาร์เรย์ (Array)

อาร์เรย์ (Array) หรือแถวลำดับ คือ การรวมกลุ่มของตัวแปรที่สามารถใช้ตัวแปร ชื่อเดียวกันแทนข้อมูลสมาชิกได้หลายตัวในคราวเดียว ด้วยการใช้เลขดรรชนี (Index) หรือซับสคริปต์ (Subscipt) เป็นตัวอ้างอิงตำแหน่งสมาชิกบนแถวลำดับนั้น [3]p.80

แถวลำดับ หรือ อาร์เรย์ (Array) คือ ชุดของข้อมูลที่มีค่าเป็นแบบใดแบบหนึ่ง มีการจัดเรียงอย่างมีลำดับก่อนหลัง (Order Set) เหมือนตารางข้อมูล ประกอบด้วยช่องสำหรับเก็บข้อมูลที่เรียงต่อกัน และเรียกข้อมูลมาใช้ผ่านดัชนี (Index) ที่กำกับแต่ละช่องข้อมูล
ซึ่งการประกาศอาร์เรย์ใน javascript เช่น var ar=new Array(); คำว่า Array ต้องขึ้นต้นด้วย A
+ http://www.thaiall.com/class/java_array.ppt


ภาพที่ 1 : อาร์เรย์ 1 มิติ 2 มิติ และ 3 มิติ
กรณีศึกษา การแยกข้อมูลเป็นอาร์เรย์จากภาพต้นไม้ของพ่อ

มีข่าวที่น่าชื่นชมของชาวลำปาง ที่รวมตัวกันร่วมกิจกรรรมแปรขบวนเป็นภาพต้นไม้ของพ่อ เพื่อแสดงพลังแห่งความจงรักภักดีสำนึกในพระมหากรุณาธิคุณ และแสดงความอาลัยพระบาทสมเด็จพระปรมินทรมหาภูมิพลอดุลยเดชเสด็จสู่สวรรคาลัย เมื่อวันศุกร์ที่ 28 ต.ค.2559 เวลา 10.00น. มีเพื่อน บุคลากร นักเรียน นักศึกษาจำนวนมากเข้าร่วมกิจกรรมนี้

มีนักศึกษาที่เรียนเรื่องโครงสร้างข้อมูล เข้าร่วมกิจกรรมนี้ เพื่อนำเรื่องใกล้ตัวมาเปรียบเทียบกับการจัดการข้อมูล เรื่องการแบ่งช่องแบบแถวลำดับ (อาร์เรย์ = Array) จึงขอใช้ "ภาพต้นไม้ของพ่อ" มาอธิบายเรื่องอาร์เรย์ เริ่มจากการนำไป split ในเว็บไซต์ imagesplitter.net แบ่งเป็น 5 แถว (row) 5 คอลัมน์ (column) จะได้ภาพย่อย 25 ภาพ แต่ละภาพจะมีจำนวนชาวลำปางแตกต่างกัน เมื่อนำมาบันทึกในอาร์เรย์ก็จะได้อาร์เรย์มิติเดียวมี 25 สมาชิก และเรียงภาพจาก 00.jpg ไปถึง 44.jpg ค่าแต่ละสมาชิกก็จะได้จากการนับจำนวนชาวลำปางในภาพ นับโดยประมาณได้ 100,080 คน
+ อัลบั้มในเฟสบุ๊ค https://www.facebook.com/pg/thaiall/photos/
+ ภาพจากโดรน https://www.facebook.com/notelampang/posts/1268703739838067

การทำงานของอาร์เรย์กับเลขคู่เลขคี่ด้วย python
numbers = [12, 37, 5, 42, 8, 3]
even = []
odd = []
while len(numbers) > :
  number = numbers.pop()
  if(number % 2 == 0):
    even.append(number)
  else:
    odd.append(number)
GitHub ระบบการควบคุมรุ่นรหัสต้นฉบับ # Git คือ ระบบควบคุมรุ่นของรหัสต้นฉบับ (Source code) มีหน้าที่จัดเก็บการเปลี่ยนแปลงของรหัสต้นฉบับในโครงการ (Project) ของเรา มีการสำรอง (Backup code) และเรียกดูย้อนไปดูรุ่นต่าง ๆ ของโครงการได้ (Previous version) และดูว่าผู้พัฒนา (Developer) แต่ละท่าน ได้เพิ่ม ลบ แก้ไขบรรทัดใด เมื่อใด ผู้พัฒนาสามารถดาวน์โหลดไปติดตั้งในเครื่อง เพื่อใช้พัฒนาโครงการของตนเองได้ โดย Github คือ เครื่องบริการฝากแฟ้ม Git สำหรับการใช้งานบน Linux ติดตั้งด้วย #sudo apt-get install git หรือจะใช้งานบนวินโดว์ สามารถดาวน์โหลดได้ที่ git-scm.com
ต.ย. รับค่าจาก prompt เก็บลงอาร์เรย์ แล้วประมวลผลเลือกมาใช้งาน
choose_even_in_array.htm

ตัวอย่าง : การประกาศ และเรียกใช้อาร์เรย์ด้วย Javascript
1. การกำหนดค่าให้ตัวแปรแถวลำดับ ตัวใดที่ไม่กำหนดจะมีค่าเป็น undefined
<script>
var ar=new Array();
ar[0]="A";
ar[1]="B";
ar[3]="C";
alert(ar[0] + ar[1] + ar[2] + ar[3] + ar.length); // ABundefinedC4
</script>
2. จำนวนสมาชิกของอาร์เรย์ ประกาศเท่าใดก็จองเท่านั้น เปลี่ยนขนาดได้ขณะประมวลผล
<script>
var ar1=new Array(); 
var ar2=new Array(10); 
alert(ar1.length + ar2.length); // 10
ar1=[];
ar2=["A","B","C"];
alert(ar1.length + ar2.length); // 3
</script>
3. การกำหนดจำนวนสมาชิกใหม่ มีผลให้ข้อมูลสมาชิกที่ไม่อยู่ในขอบเขตหายไป
<script>
var ar=new Array("A","B","C");
ar.length=1;
alert(ar[0] + ar[1]); // Aundefined
</script>
4. การใช้ for .. in จะเลือกเฉพาะมีค่า และข้าม undefined ไป
<script>
var ar=new Array("A","B","C");
ar[5]="E";
alert(ar.length); // 6
for (x in ar) { alert(ar[x]); } // 4 times
</script>
5. ฟังก์ชัน splice() ใช้ลบ และย้าย และแทนที่ สมาชิกในอาร์เรย์
<script>
// array.splice(index,howmany,item1,.....,itemX)
var a = ["a","b","c","d","e","f"];
var b = a.splice(3,2); // d,e = what are removed from a
for (x in b) { alert(b[x]); } // d,e
for (x in a) { alert(a[x]); } // a,b,c,f
a.splice(0,2,"1","2");
for (x in a) { alert(a[x]); } // 1,2,c,f
</script>
6. การจัดเรียงตัวเลข แต่ javascript มองเป็นตัวอักษร
<script>
// var ar = ["1","20","10","2"]; // same result with 1,20,10,2
var ar = [1,20,10,2]; // same result with 1,20,10,2
ar.reverse();
for (x in ar) { alert(ar[x]); } // 2,10,20,1
ar.sort();
for (x in ar) { alert(ar[x]); } // 1,10,2,20
ar.sort(function(a,b){ return (a - b); }); // ascending
for (x in ar) { alert(ar[x]); } // 1,2,10,20
ar.sort(function(a,b){ return (b - a); }); // descending
for (x in ar) { alert(ar[x]); } // 20,10,2,1
</script>
7. การจัดการอาร์เรย์ 2 มิติ
<script>
var ar = [
[1, 2],
[3, 4],
[5, 6]
];
alert(ar.length); // 3
for (x in ar) { alert(ar[x]); } // 1,2 - 3,4 - 5,6
alert(ar[0]); // 1,2
for (x in ar) { 
  for (y in ar[x]) alert(ar[x][y]); // 1,2,3,4,5,6
} 
</script>
8. การจัดการอาร์เรย์ 3 มิติ และการใช้ for .. in ซ้อนกันสำหรับวนลูปในอาร์เรย์ จะไม่ทำงานกับค่าที่ไม่ใช่อาร์เรย์
<script>
var ar = [
[0, ["tom", 2000],["jack", 1000]],
[1, ["jojo", 3500]],
[2, ["boy",2500],["girl", 500]]
];
alert(ar.length); // 3
alert(ar[2][0]); // 2
alert(ar[2][1]); // boy,2500
alert(ar[2][1][0]); // boy
alert(ar[2][1][1]); // 2500
alert(ar[2][2][0]); // girl
alert(ar[2][2][1]); // 500
for (x in ar) 
  for (y in ar[x]) 
    for (z in ar[x][y]) 
       alert(ar[x][y][z]); 
// tom,2000,jack,1000,jojo,3500,boy,2500,girl,500
for (x in ar) {
  for (y in ar[x]) 
    if (!Array.isArray(ar[x][y])) alert(ar[x][y]); // 0,1,2  
}
</script>
9. ตัวอย่างอาร์เรย์ 3 มิติที่สมบูรณ์ แต่ไม่สมดุล ดังนั้นสมาชิกมีอะไรบ้าง
var ar = [
[[101,"tom", 2000],[102,"jack", 1000],[103,"mama", 700]],
[[201,"jojo", 3500]],
[[301,"boy",2500],[302,"girl", 500]]
];
10. สร้างอาร์เรย์ 2 มิติ และสุ่มค่าลงไปในทุกช่อง
<script>
// Math.random() 0.000 - 0.999
var iMax = 2;
var jMax = 3;
var f = new Array();
alert(f.length);
for (i=0;i<iMax;i++) {
 f[i] = new Array();
 for (j=0;j<jMax;j++) {
  f[i][j] = Math.random() * 10;
 }
}
alert(f[1][2]); // 7.234567
</script>
แหล่งอ้างอิง (Reference)
+ http://www.javascripter.net/faq/twodimensional.htm
+ https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/isArray
+ http://www.webtoolkitonline.com/javascript-tester.html
+ http://www.w3schools.com/html/tryit.asp?filename=tryhtml_basic
+ http://www.i-programmer.info/programming/javascript/
เอกสารฉบับเต็ม (Full Text)

รศ.ดร.สมชาย ประสิทธิ์จูตระกูล

Bruno R. Preiss

Mark Allen Weiss

William H. Ford

DB: พัฒณืรพี

Michael Mcmillan
เอกสารอ้างอิง (Reference)
[1] โอภาส เอี่ยมสิริวงศ์, "โครงสร้างข้อมูล (Data Structures) เพื่อการออกแบบโปรแกรมคอมพิวเตอร์", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2549.
[2] วิวัฒน์ อภิสิทธิ์ภิญโญ, อมร มุสิกสาร, "โครงสร้างข้อมูล (Data Structures)", บริษัท เอ-บุ๊ค ดิสทริบิวชั่น จำกัด., กรุงเทพฯ, 2548.
[3] เนรมิต ชุมสาย ณ อยุธยา, "เรียนรู้โครงสร้างข้อมูลและอัลกอริทึมด้วย Java", บริษัท ซีเอ็ดยูเคชั่น จำกัด., กรุงเทพฯ, 2550.
[4] Michael McMillan, "Data Structures and Algorithms with JavaScript", O’Reilly Media, Inc., USA., 2014.
[5] Loiane Groner, "Learning JavaScript Data Structures and Algorithms", Packt Publishing, 2014.


"Imagination is more important than knowledge" - Albert Einstein
http://goo.gl/72BPC