วันศุกร์ที่ 6 กันยายน พ.ศ. 2556

ใบความรู้ 10 การเขียนโปรแกรมด้วยภาษา C#

คำสั่ง foreach

         ภาษา C# ได้เตรียมโครงสร้าง foreach สำหรับการเขียนโปรแกรมแบบวนซ้ำเพื่อความสะดวก
ในการเข้าถึงข้อมูลในอาเรย์ การใช้งานมีรูปแบบดังนี้

foreach (DataType var in ArrayName)
statement;

โดย DataType คือชนิดข้อมูลภายในอาเรย์ var คือชื่อตัวแปรสำหรับเก็บค่าทีละค่าจากอาเรย์ในการวนซ้ำแต่ละรอบ และ ArrayName คืออาเรย์ที่จะนำค่าภายในมาใช้งาน ดังนั้นคำสั่ง statement จึงถูกกระทำ
เป็นจำนวนครั้งเท่ากับจำนวนข้อมูลในอาเรย์

          เช่นเดียวกับโครงสร้างอื่นๆ ที่ได้ศึกษาไปก่อนหน้านี้แล้ว คำสั่งที่ถูกวนซ้ำจะมีได้เพียงคำสั่งเดียว
การใช้งานมากกว่าหนึ่งคำสั่งต้องรวมคำสั่งทั้งหมดไว้ภายในวงเล็บปีกกา

foreach (DataType var in ArrayName) {
   statement1;
   statement2;
   :
   statementN;
}

ตัวอย่างที่ 6.6 โปรแกรมด้านล่างถูกดัดแปลงจากโปรแกรมในตัวอย่างที่ 6.5 โดยมีการใช้งานโครงสร้าง
foreach แทนที่จะเป็นโครงสร้าง for ตามปกติ ให้สังเกตความแตกต่างที่บรรทัดที่ 6 และ 7

1: using System;
2: class AverageWeight {
3:  static void Main() {
4:    double[] weights = {65.5, 44.8, 70.0, 54.2, 77.6};
5:    double sum = 0.0;
6:    foreach (double in weights)
7:      sum += x;
8:    Console.WriteLine("Average weight is {0:f2}",
9:      sum/weights.Length);
10:  }
11: }
การส่งอาเรย์ไปยังเมท็อด

          เราได้ทราบจากกิจกรรมที่ผ่านมาแล้วว่าเมท็อดสามารถรับค่าจากผู้เรียกผ่านทางพารามิเตอร์ของ
เมท็อดนั้น ๆ นอกจากการส่งค่าในรูปข้อมูลพื้นฐาน (เช่น int, double, string) แล้ว ภาษา C#
อนุญาตให้เมท็อดรับพารามิเตอร์ในรูปของอาเรย์ได้อีกด้วย ซึ่งทำได้ง่ายๆ เพียงแค่ระบุให้พารามิเตอร์ที่
รับเข้ามามีชนิดข้อมูลเป็นแบบอาเรย์เท่านั้นลองพิจารณาตัวอย่าง

ตัวอย่างที่ 6.7 โปรแกรมด้านล่างประกาศเมท็อดชื่อ ArraySum ซึ่งรับพารามิเตอร์หนึ่งตัวเป็นอาเรย์ของ
double จากนั้นจึงคำนวณผลรวมของค่าทั้งหมดในอาเรย์และส่งค่าผลรวมกลับไปยังผู้เรียก สังเกตการ
ระบุชนิดของพารามิเตอร์เป็น double[] ในบรรทัดที่ 3 และการใช้งานโครงสร้าง foreach ซึ่งทำให้
เมท็อดนี้ประมวลผลอาเรย์ได้ทุกขนาด

1: using System;
2: class ArrayTest {
3: static double ArraySum(double[] data) {
4: double sum = 0.0;
5: foreach (double x in data)
6: sum += x;
7: return sum;
8: }
9:
10: static void Main() {
11: double[] myData = {1.0, 2.4, 3.6, 4.8};
12: Console.WriteLine("Sum = {0}", ArraySum(myData));
13: }
14: }

การการอ้างถึงสตริงในรูปแบบอาเรย์

           ภาษา C# อนุญาตให้เราประมวลผลข้อมูลชนิดข้อความหรือสตริง (string) เสมือนว่าข้อมูลนั้นเป็น
อาเรย์ของอักขระโดยใช้ตัวดำเนินการต่างๆ ที่ใช้กับอาเรย์ได้ทันที เช่นตัวดำเนินการ [] โครงสร้าง
foreach และคุณสมบัติ Length โดยมีข้อจำกัดตรงที่เราทำได้เพียงอ่านค่าอักขระ ณ ตำแหน่งต่างๆ
ของข้อความได้เท่านั้น แต่ไม่สามารถเปลี่ยนแปลงส่วนหนึ่งส่วนใดของข้อความนั้นๆ ได้

ตัวอย่างที่ 6.8 ตัวอย่างต่อไปนี้รับข้อความจากผู้ใช้และรายงานจำนวนตัวอักขระ 'E' ภายในข้อความนั้นๆ

using System;
class CountE {
   static void Main() {
      Console.Write("Enter a string: ");
      string s = Console.ReadLine();
      int count = 0;
      for (int i = 0; i < s.Length; i++) {
         if (s[i] == 'E') count++;
      }
      Console.WriteLine("There are {0} E's in the string", count);
   }
}

ตัวอย่างผลการทำงาน

Enter a string: HELLO EVERYONE
There are 4 E's in the string

ตัวอย่างที่ 6.9 โปรแกรมต่อไปนี้ให้ผลการทำงานเหมือนโปรแกรมในตัวอย่างที่แล้วทุกประการ แต่มีการใช้
งานโครงสร้าง foreach แทนการใช้โครงสร้าง for

using System;
class CountE {
   static void Main() {
      Console.Write("Enter a string: ");
      string s = Console.ReadLine();
      int count = 0;
      foreach (char c in s) {
         if (c == 'E') count++;
      } 
      Console.WriteLine("There are {0} E's in the string", count);
   }
}

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

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