Câu lnh lp foreach
Câu lnh lp foreach khá mi vi nhng người đã hc ngôn ng C, t khóa này
được s dng trong ngôn ng Visual Basic. Câu lnh foreach cho phép chúng ta lp
qua tt c các mc trong mt mng hay trong mt tp hp.
Cú pp s dng lnh lp foreach như sau:
foreach (<kiu d liu thành phn> <tên truy cp> in <mng/tp hp> )
{
// thc hin thông qua <tên truy cp> tương ng vi
// tng mc trong mng hay tp hp
}
Do vy, chúng ta có th ci tiến ví d 9.1 trước bng cách thay vic s dng vòng lp
for
bng vòng lp foreach để truy cp đến tng thành phn trong mng.
Ví d 9.2: S dng foreach.
-----------------------------------------------------------------------------
namespace Programming_CSharp
{
using System;
// to mt lp đơn gin để lưu tr trong mng
public class Employee
{
// b khi to ly mt tham s
public Employee( int empID )
{
this.empID = empID;
}
public override string ToString()
{
return empID.ToString();
}
// biến thành viên private
private int empID;
private int size;
}
public class Tester
{
static void Main()
{
int[] intArray;
Employee[]
empArray; intArray =
new int[5];
empArray = new Employee[3];
// to đối tượng đưa vào mng
for( int i = 0; i < empArray.Length; i++)
{
empArray[i] = new Employee(i+10);
}
// xut mng nguyên
foreach (int i in
intArray)
{
Console.Write(i.ToString()+”\t”);
}
// xut mng Employee
foreach ( Employee e in empArray)
{
Console.WriteLine(e.ToString()+”\t”);
}
}
}
}
-----------------------------------------------------------------------------
Kết qu ca ví d 9.2 cũng tương t như ví d 9.1. Tuy nhiên, vi vic s dng vòng
lp for
ta phi xác định kích thước ca mng, s dng biến đếm tm thi để truy cp đến tng
thành phn trong mng:
for (int i = 0 ; i < empArray.Length; i++)
{
Console.WriteLine(empArray[i].ToString());
}
Thay vào đó ta s dng foreach , khi đó vòng lp s t động trích ra tng mc tun t
trong mng và gán tm vào mt tham chiếu đối tượng khai báo đầu vòng lp:
foreach ( Employee e in empArray)
{
Console.WriteLine(e.ToString()+”\t”);
}
Đối tượng được trích t mng có kiu d liu tương ng. Do đó chúng ta có th s
dng bt
c thành viên public ca đối tượng.
Mng đa chiu
T đầu chương đến gi chúng ta ch nói đến mng các s nguyên hay mng các đối
tượng. Tt c các mng này đều là mng mt chiu. Mng mt chiu trong đó các thành
phn ca nó ch đơn gin là các đối tượng kiu giá tr hay đối tượng tham chiếu. Mng
th được t chc phc tp hơn trong đó mi thành phn là mt mng khác, vic t
chc này gi là mng đa chiu.
Mng hai chiu đưc t chc thành các dòng và ct, trong đó các dòng là được tính theo
hàng ngang ca mng, và các ct đượcnh theo hàng dc ca mng.
Mng ba chiu cũng có th được to ra nhưng thường ít s dng do khó hình dung.
Trong mng ba chiu nhng dòng bây gi là các mng hai chiu.
Ngôn ng C# h tr hai kiu mng đa chiu là:
Mng đa chiu cùng kích thước: trong mng này mi dòng trong mng có cùng
kích thước vi nhau. Mng này có th là hai hay nhiu hơn hai chiu.
Mng đa chiu không cùng kích thước: trong mng này các dòng có th không
cùng kích thước vi nhau.
Mng đa chiu cùng kích thước
Mng đa chiu cùng kích thước còn gi là mng hình ch nht (rectanguler array).
Trong mng hai chiu c đin, chiu đầu tiên được tính bng s dòng ca mng và
chiu th hai được tính bng s ct ca mng.
Để khai báo mng hai chiu, chúng ta có th s dng cú pháp theo sau:
<kiu d liu> [,] <tên mng>
Ví d để khai báo mt mng hai chiu có tên là myRectangularArray để cha hai dòng
và ba ct các s nguyên, chúng ta có th viết như sau:
int [ , ] myRectangularArray;
Ví d tiếp sau đây minh ha vic khai báo, to th hin, khi to và in ni dung ra
màn hình ca mt mng hai chiu. Trong ví d này, vòng lp for được s dng để
khi to các thành phn trong mng.
Ví d 9.4: Mng hai chiu.
-----------------------------------------------------------------------------
namespace Programming_CSharp
{
using System;
public class Tester
{
static void Main()
{
// khai báo s dòng và s ct ca mng
const int rows = 4;
const int columns = 3;
// khai báo mng 4x3 s nguyên
int [,] rectangularArray = new int[rows, columns];
// khi to các thành phn trong mng
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
{
rectangularArray[i,j] = i+j;
}
}
// xut ni dung ra màn hình
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
{
Console.WriteLine(“rectangularArray[{0},{1}] = {2}”,
i, j, rectangularArray[i, j]);
}
}
}