1 / 24

5. Array

5. Array. โครงสร้างข้อมูลพื้นฐานที่สุด ที่ไม่เคยเลย จะไม่ใช้อาร์เรย์. เป้าหมายการเรียนรู้. เป้าหมายการใช้อาร์เรย์ การสร้างค่าเริ่มต้นของอาร์เรย์ และอโนนิมัสไทป์ การสร้างอาร์เรย์หลายมิติ พร็อบเพอร์ตี้พื้นฐาน และเมธอดพื้นฐานในการใช้อาร์เรย์ การนำอาร์เรย์ไปใช้งาน กับสเตทเม้นท์ต่างๆ

fadhila
Download Presentation

5. Array

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. 5. Array โครงสร้างข้อมูลพื้นฐานที่สุด ที่ไม่เคยเลย จะไม่ใช้อาร์เรย์ C# Programming with Visual C# 2010 Express

  2. เป้าหมายการเรียนรู้ • เป้าหมายการใช้อาร์เรย์ • การสร้างค่าเริ่มต้นของอาร์เรย์ และอโนนิมัสไทป์ • การสร้างอาร์เรย์หลายมิติ • พร็อบเพอร์ตี้พื้นฐาน และเมธอดพื้นฐานในการใช้อาร์เรย์ • การนำอาร์เรย์ไปใช้งาน กับสเตทเม้นท์ต่างๆ • อาร์เรย์ลิสท์ C# Programming with Visual C# 2010 Express

  3. อาร์เรย์คืออะไร • อาร์เรย์คือชุดของลำดับที่ใช้เก็บข้อมูล ทุกๆ ข้อมูลที่เก็บข้อมูลมีชนิดข้อมูลเดียวกัน • การสร้างอาร์เรย์อย่างง่ายทำได้โดยการสร้างเป็นอาร์เรย์มิติเดียว เช่น รายชื่อลูกค้า มองเป็นรายการๆ แถวยาวแถวเดียว • อาร์เรย์สองมิติมีลักษณะเป็นเหมือนตาราง ที่มีคอลัมน์ และแถว อาร์เรย์สามมิติมีลักษณะเป็นเหมือนก้อนลูกบาศก์ ที่มีทั้งกว้าง ยาว และลึก • สำหรับอาร์เรย์ที่มากกว่า 3 มิติ จะจิตนาการยากขึ้นไป • หากจะเก็บข้อมูลต่างชนิดในอาร์เรย์จะทำอย่างไร ? ตอบว่าทำได้ก็ถูก ตอบว่าทำไม่ได้ก็ถูก ณ ตอนนี้คิดเพียงทำไมได้ไปก่อน C# Programming with Visual C# 2010 Express

  4. Index 0 Index 6 ลักษณะของอาร์เรย์ มีลักษณะทั่วไปคือ • การเก็บข้อมูลในอาร์เรย์มีลักษณะเป็นลำดับ ตามเลขดัชนีที่เริ่มต้นค่าแรกที่ศูนย์ • ความยาวของอาร์เรย์มีจำกัด และเก็บได้ไม่เกินค่าสูงสุดของอาร์เรย์ที่เก็บได้ • อาร์เรย์มีมิติได้หลายมิติ และจำนวนมิติก็คือขนาดของ แร็งค์ (rank) • การเข้าถึงอาร์เรย์ได้โดยการระบุเลขดัชนีของอาร์เรย์ • การเก็บอาร์เรย์ในหน่วยความจำ จะเก็บเรียงติดกัน ทำให้การเข้าถึงอาร์เรย์ทำได้รวดเร็ว C# Programming with Visual C# 2010 Express

  5. การประกาศอาร์เรย์ • การประกาศอาร์เรย์ทำได้เหมือนการประกาศตัวแปรเพียงแต่ ต้องมีเครื่องหมายวงเล็บฉาก “[ ]” หลังชนิดข้อมูล เช่นint [ ] x; • แต่ยังไม่มีค่าในหน่วยความจำ การให้มีค่าในหน่วยความจำจะต้องระบุค่าขนาดอาร์เรย์เริ่มต้นและใช้คีย์เวิร์ด “new” ดังตัวอย่างเช่น int[ ] x = new int[4]; • CLR จะจองหน่วยความจำพร้อมทั้งกำหนดค่าเริ่มต้นให้อัตโนมัติ • ค่าเริ่มของของ int จะเป็น 0 ส่วนค่าเริ่มต้นของ string เป็น null ขึ้นอยู่กับชนิดข้อมูล ชนิดข้อมูลที่เป็น อ๊อปเจ็ค มีค่าเริ่มต้นเป็น null ชนิดข้อมูลเป็นวาลูไทป์ มีค่าเป็นตามชนิดวาลูไปท์ C# Programming with Visual C# 2010 Express

  6. การประกาศอาร์เรย์ dataType[ ] name0; dataType[ ] name1 = new dataType[ size] √ประกาศได้ type[ ]name; type name[ ]; type[4] name; X ประกาศไม่ถูกต้อง X ประกาศไม่ถูกต้อง C# Programming with Visual C# 2010 Express

  7. การประกาศอาร์เรย์หลายมิติการประกาศอาร์เรย์หลายมิติ • การประกาศอาร์เรย์หลายมิติหรือมีแร็งค์มากกว่าหนึ่ง เราใช้การจิตนาการมิติของอาร์เรย์ ทำได้ดีเพียง 3 มิติ ถ้าให้หนึ่งมิติคือ แถว สองมิติคือตาราง และสามมิติคือลูกบาศก์ การกำหนดขนาดมิติทำได้ถึง 32 มิติ • การประกาศให้มีมิติทำได้โดยการเพิ่มเครื่องหมายจุลภาค ขั้นระหว่างช่องว่าง แต่ละช่องว่างคือมิติ เช่น มีหนึ่งจุลภาคหมายถึงมีหนึ่งมิติ เพราะมีสองช่องว่าง ([ , ]) สองจุดภาคมีสามมิติ เพราะมีสามช่องว่าง ([ , , ]) dataType[ , , . . . ] array1 = new dataType[ Size1, Size2 , . . . ]; C# Programming with Visual C# 2010 Express

  8. Jagged array • การประกาศอาร์เรย์หลายมิติ ที่กำหนดขนาดเริ่มต้นบางส่วน สามารถทำได้ เช่นการประกาศให้มีอาร์เรย์มีขนาดแถว 3 และไม่ระบุขนาดหลัก การกำหนดอย่างนี้มีประโยชน์ในกรณีที่ไม่ต้องการกำหนดการจองหน่วยความจำเพราะยังไม่ทราบขนาดที่แน่ชัด อาร์เรย์แบบนี้เรียกว่า แจ็กด์อาร์เรย์ • ตัวอย่าง แจ็กด์อาร์เรย์สองมิติdataType [ ][ ] JaggedArray = new dataType[10][ ]; C# Programming with Visual C# 2010 Express

  9. การกำหนดขนาดอาร์เรย์ขณะรันไทม์การกำหนดขนาดอาร์เรย์ขณะรันไทม์ • การกำหนดขนาดอาร์เรย์ไม่จำเป็นตัองกำหนดได้ขณะคอมไพล์เท่านั้น เราสามารถกำหนดขณะรันไทม์ได้ โดยมีความเร็วเท่ากันทุกกรณีกับการกำหนดขนาดคอมไพล์ (หรือขณะออกแบบโปรแกรม) การกำหนดขนาดอาร์เรย์ขณะรันไทม์ Console.WriteLine("Enter num of rows matrix:"); string r = Console.ReadLine( ); int rows = int.Parse(r); Console.WriteLine("Enter num of columns matrix:"); string c = Console.ReadLine(); int cols = int.Parse(c); int[,] matrix = new int[rows, cols]; C# Programming with Visual C# 2010 Express

  10. การตรวจสอบขอบเขตอาร์เรย์การตรวจสอบขอบเขตอาร์เรย์ • การเข้าถึงอาร์เรย์ในแต่ละหน่วย ระบุได้ด้วยเลขดัชนี แต่การระบุหน่วยดัชนีที่เกิดขอบเขตของอาร์เรย์จะทำให้เกิดความผิดพลาด IndexOutOfRangeException • ทางที่ดีควรจะแน่ใจในขนาดของอาร์เรย์ โดยการใช้พร๊อบเพอร์ตี้ Length หรือจะใช้เมธอด GetLength( ) • ความแตกต่างของทั้งสอง คือ Length จะให้ขนาดทั้งหน่วย หรือนับทุกหน่วยของอาร์เรย์ แต่ GetLength( ) จะนับขนาดในมิติหนึ่งๆ เท่านั้น • สมมุติให้อาร์เรย์มีมิติ เท่ากับ 2 แต่ละแถวและหลักมีขนาด 2 แต่ละแถวและหลักวัดด้วย GetLength( ) = 2 และมีขนาดทั้งหมดวัด Length = 4 (มาจาก ขนาดแถว x ขนาดหลัก) C# Programming with Visual C# 2010 Express

  11. การตรวจสอบขนาดอาร์เรย์การตรวจสอบขนาดอาร์เรย์ • int[ ] x = new int[ 2 ]; • Console.WriteLine(x.GetLength(0)); //print 2 • Console.WriteLine(x.Length); // print 2 • int[ , ] y = new int[ 2, 2 ]; • Console.WriteLine(y.GetLength(0)); //print 2 • Console.WriteLine(y.GetLength(1)); //print 2 • Console.WriteLine(y.Length); // print 4 C# Programming with Visual C# 2010 Express

  12. การกำหนดค่าให้อาร์เรย์การกำหนดค่าให้อาร์เรย์ • การกำหนดค่าเริ่มต้นให้สามารถทำได้ 2 วิธีคือ • กำหนดให้เท่ากับ อาร์เรย์ที่กำหนดขนาดแล้ว ต่อมาให้ใส่ค่าลงในปีกกา คล่อมค่าแต่ละค่า ของอาร์เรย์ เช่นint [ ] x = new int [ 3 ] { 0, 1, 2 }; • กำหนดให้เท่ากับ ปีกกาพร้อมระบุค่าได้เลย โดยไม่ต้องกำหนดขนาด และคีย์เวิร์ด “new” เพราะอาร์เรย์จะจองหน่วยความจำเท่ากับที่กำหนดค่าเริ่มต้นให้ เช่นint [ ] x = { 0, 1, 2 }; C# Programming with Visual C# 2010 Express

  13. การสร้างเริ่มต้นให้อโนนิมัสไทป์การสร้างเริ่มต้นให้อโนนิมัสไทป์ • ค่าอโนนิมัส (var) สร้างได้อีกวิธีจากการประกาศอาร์เรย์ แบบ อิมพลิสิทลี่ ไทป์ อาร์เรย์ (Implicitly Typed Array) • การประกาศแบบนี้จะสร้างค่าเริ่มต้นให้กับอาร์เรย์ โดยไม่ต้องระบุชนิดตัวแปรล่วงหน้า ตัวอย่างต่อไปนี้ จะเป็นประกาศตัวแปรอโนนิมัส พร้อมๆ กับสร้างเริ่มต้น ในรูปแบบต่างๆ var a = new[] { 1, 10, 100 }; //int[ ] var b = new[] { "hello", null, "world" }; // string[ ] var c = new[] { new[]{1,2,3,4}, new[]{5,6,7,8}}; Console.WriteLine(a[0]);//print 1 Console.WriteLine(b[0]);//print hello Console.WriteLine(c[0][3]);//print 4 C# Programming with Visual C# 2010 Express

  14. การคัดลอกอาร์เรย์ • การทำสำเนาหรือคัดลอกอาร์เรย์หนึ่ง ทำได้โดยการอ้างอิงถึงอาร์เรย์ที่ได้มีการสร้างมาก่อนแล้ว • การปรับแต่งต่อเติมกับอาร์เรย์เดิมก็มีผลเช่นเดียวกับ อาร์เรย์ใหม่ที่คัดลอกมา เพราะการคัดลอกอาร์เรย์แบบอ้างอิง(วัตถุใหม่ไม่เกิด) จะยังคงใช้อาร์เรย์เดิมร่วมกันอยู่ int[] x = { 1, 2, 3 }; int[] y = x; Console.WriteLine("x[0]={0}, y[0]={1}", x[0], y[0]); //print "x[0]=1, y[0]=1" x[0] = 4; Console.WriteLine("x[0]={0}, y[0]={1}", x[0], y[0]); //print "x[0]=4, y[0]=4" C# Programming with Visual C# 2010 Express

  15. พร็อบเพอร์ตี้เมธอดของอาร์เรย์พร็อบเพอร์ตี้เมธอดของอาร์เรย์ • อาร์เรย์มีใช้เพื่อเก็บข้อมูล การใช้งานอาร์เรย์ให้มีประโยชน์มากขึ้น ก็ต่อเมื่อนำพร็อบเพอร์ตี้ และเมธอดของอาร์เรย์มาให้เต็มที่ • การใช้ประโยชน์จากอาร์เรย์สามารถใช้ได้เหมือนกันหมด เพราะทุกๆ อาร์เรย์มากจากชนิดข้อมูลเดียวกันคือ System.Array • พร๊อบเพอร์ตี้ ที่ใช้ทั่วไป คือ การหาขนาดจำนวนหน่วยในอาร์เรย์ ใช้ Length • สำหรับเมธอดทั่วไป ที่น่านำไปใช้คือ GetValue( ) และ SetValue( ) ทั้งสองตัวนี้ใช้สำหรับการเรียกค่า และกำหนดค่า Sort( ) ใช้สำหรับเรียงค่าของอาร์เรย์ที่มีหนึ่งมิติ C# Programming with Visual C# 2010 Express

  16. เมธอดของอาร์เรย์ C# Programming with Visual C# 2010 Express

  17. การเรียกข้อมูลภายในอาร์เรย์การเรียกข้อมูลภายในอาร์เรย์ • การเรียกข้อมูลด้วย สแตทเม้นท์ for{ } ใช้คู่กับพร็อบเพอร์ตี้ Length • การเรียกข้อมูลด้วย สแตทเม้นท์ foreach { } ใช้วนเรียก โดยไม่ต้องทราบทั้งชนิดข้อมูล และขนาดข้อมูลในอาร์เรย์ int[] array = { 1, 2, 3, 4, 5 }; for (int i = 0; i < array.Length; i++) Console.WriteLine(array[i]); int[] array = { 1, 2, 3, 4, 5 }; foreach (var item in array) Console.WriteLine(item); C# Programming with Visual C# 2010 Express

  18. อาร์เรย์ในเมธอด Main( ) • เมธอด Main( ) เป็นเมธอดหลักของ Console Application • เมธอด Main( ) เป็นเหมือนจุดเริ่มต้นการทำงานของแอปพลิเคชัน • เมธอด Main( ) มีตัวแปรเข้า เป็นอาร์เรย์ มีชนิดข้อมูลเป็น string และเป็นตัวแปรเข้าที่สามารถมีได้หลายตัว ดังจำนวนข้อมูลในอาร์เรย์ • เมธอด Main( ) มีการเข้าถึงตัวแปร args ใช้การอ้างอิงแบบอาร์เรย์ทั่วไป เช่น args[0] หมายถึงตัวแปรแรก args[1] เป็นตัวแปรที่สอง • การกำหนดขนาดอาร์เรย์ถูกกำหนดขณะรันไทม์ ด้วยการเรียกโปรแกรมที่เป็นแอสแซมบลีแล้ว • การเรียกให้แอปพลิเคชันนี้ทำงาน เรียกโดยใช้คำสั่ง “app.exe s1, s2” C# Programming with Visual C# 2010 Express

  19. ตัวอย่างการใช้ เมธอด Main( ) • class Program • { • static void Main(string[] args) • { • if (args.Length==2) • { • Console.WriteLine("Curency1:{0:C0} ",int.Parse(args[0])); • Console.WriteLine("Curency2:{0:C2}", int.Parse(args[1])); • } • else • { • Console.WriteLine("args must equal 2"); • } • Console.Read(); • } • } C# Programming with Visual C# 2010 Express

  20. ข้อจำกัดของอาร์เรย์ • มีขนาดจำกัด ต้องระบุขนาดอาร์เรย์ก่อนใช้งาน • การเพิ่มขนาดอาร์เรย์ไม่สามารถยืดหยุ่น หรือหดขนาดได้ เมื่อสร้างแล้ว • อาร์เรย์สร้างขึ้นเพื่อเก็บข้อมูลชนิดเดียวเหมือนกันหมดทั้งอาร์เรย์ • ไม่สามารถป้องกันการเขียนทับได้ ข้อจำกัดเหล่านี้แก้ได้ด้วยการใช้ อาร์เรย์ลิสท์ (ArrayList) เป็นคลาสหนึ่งใน ห้อง System.Collection C# Programming with Visual C# 2010 Express

  21. อาร์เรย์ลิสท์ (ArrayList) • ArrayList ที่มีลักษณะยืดหยุ่นสูงกว่า เพราะอาร์เรย์ลิสท์ ใช้งานได้โดยไม่ต้องระบุขนาด หรือจะระบุขนาดก็ได้ สามารถเก็บข้อมูลภายในอาร์เรย์ต่างชนิดกันได้ • การใช้งานต้องอ้างอิง System.Collections หนึ่งใน Collections คือ ArrayList ArrayList al = new ArrayList(); al.Add("string"); al.Add(1); foreach (var item in al) { Console.WriteLine(item); } C# Programming with Visual C# 2010 Express

  22. สรุปท้ายบท • การรู้จักอาร์เรย์ เครื่องมือเป็นพื้นฐานในการเก็บข้อมูล ที่มีขนาดแน่นอน การสร้างจะต้องระบุขนาด และมิติอาร์เรย์ • การะบุขนาดสามารถทำได้ทั้งขณะคอมไพล์ไทม์ และรันไทม์ • การใช้งานอาร์เรย์ มีพร็อบเพอร์ตี้และเมธอดของอาร์เรย์ ต่างๆ เช่น Length, Rank, GetValue( ), Clear( ) ทำให้ใช้งานอาร์เรย์ได้เร็วขึ้น • การนำสเตทเม้นท์ for, foreach เพื่อนำข้อมูลในอาร์เรย์มาใช้งาน นอกจากการระบุอาร์เรย์โดยตรง • ArrayList เป็นคลาสประเภท Collection ใช้เก็บข้อมูลได้แบบอาร์เรย์แต่มีความยืดหยุ่นสูงกว่า C# Programming with Visual C# 2010 Express

  23. ทำถามทบทวน • อาร์เรย์มีไว้เพื่ออะไร • คำสั่งต่อไปนี้ผิดพลาดอะไร และควรแก้ไขอย่างไร • int array[ ]; • int [ ] array = new int[ ]; • int[ ] array = new long[ 1 ]; • int [ ] array = new int[ ]{1,2,3}; • int [ ] array;array = {1, 2, 3}; • int [ ] array;Console.WriteLine(array[ 0 ]); • int [ ] array = new int[ ]; • int [ ] array = new int[ 2 ]{0, 1, 2}; • int[ , ] array = new int[ 2, 3] { { 1,2}, {1,2,3} }; • int [ ] array = new int[ 2];Console.WriteLine{array.Length( )}; C# Programming with Visual C# 2010 Express

  24. คำถามทบทวน • int[ , ] grid = new int [ 3,2 ] เมื่อทดสอบด้วย พร็อบเพอร์ตี้ Rank และ Length จะมีค่าเท่ากับเท่าใด • จงหา 2 วิธีคัดลอกอาร์เรย์ • ใช้เมธอดอะไรเพื่อหาตำแหน่งดัชนีของอาร์เรย์ • ใช้สเตทเม้นท์ใดเพื่อวนซ้ำอาร์เรย์ทุกค่าโดยไม่ต้องทราบขนาดของอาร์เรย์ • อาร์เรย์ลิสท์ ต่างกับ อาร์เรย์ทั่วไปอย่างไร C# Programming with Visual C# 2010 Express

More Related