คำสั่ง 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 x 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: }
|
การการอ้างถึงสตริงในรูปแบบอาเรย์
อาเรย์ของอักขระโดยใช้ตัวดำเนินการต่างๆ ที่ใช้กับอาเรย์ได้ทันที เช่นตัวดำเนินการ [] โครงสร้าง
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);
}
}
|
ไม่มีความคิดเห็น:
แสดงความคิดเห็น