Tải bản đầy đủ (.pdf) (11 trang)

Tài liệu Mảng, Chỉ Mục, Tập Hợp phần 2 ppt

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (176.59 KB, 11 trang )

Câu lệnh lặp foreach

Câu lệnh lặp foreach khá mới với những người đã học ngôn ngữ C, từ khóa này
được sử dụng trong ngôn ngữ Visual Basic. Câu lệnh foreach cho phép chúng ta lặp
qua tất cả các mục trong một mảng hay trong một tập hợp.
Cú pháp sử dụng lệnh lặp foreach như sau:

foreach (<kiểu dữ liệu thành phần> <tên truy cập> in <mảng/tập hợp> )

{


// thực hiện thông qua <tên truy cập> tương ứng với

// từng mục trong mảng hay tập hợp

}


Do vậy, chúng ta có thể cải tiến ví dụ 9.1 trước bằng cách thay việc sử dụng vòng lặp
for
bằng vòng lặp foreach để truy cập đến từng thành phần trong mảng.
Ví dụ 9.2: Sử dụng foreach.


namespace Programming_CSharp

{


using System;



// tạo một lớp đơn giản để lưu trữ trong mảng
public class Employee
{


// bộ khởi tạo lấy một 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];

// tạo đối tượng đưa vào mảng

for( int i = 0; i < empArray.Length; i++)

{


empArray[i] = new Employee(i+10);


}


// xuất mảng nguyên
foreach (int i in
intArray)
{


Console.Write(i.ToString()+”\t”);

}


// xuất mảng Employee

foreach ( Employee e in empArray)

{


Console.WriteLine(e.ToString()+”\t”);

}

}

}

}




Kết quả của ví dụ 9.2 cũng tương tự như ví dụ 9.1. Tuy nhiên, với việc sử dụng vòng
lặp for
ta phải xác định kích thước của mảng, sử dụng biến đếm tạm thời để truy cập đến từng
thành phần trong mảng:



for (int i = 0 ; i < empArray.Length; i++)

{


Console.WriteLine(empArray[i].ToString());

}


Thay vào đó ta sử dụng foreach , khi đó vòng lặp sẽ tự động trích ra từng mục tuần tự
trong mảng và gán tạm vào một tham chiếu đối tượng khai báo ở đầu vòng lặp:
foreach ( Employee e in empArray)

{


Console.WriteLine(e.ToString()+”\t”);

}



Đối tượng được trích từ mảng có kiểu dữ liệu tương ứng. Do đó chúng ta có thể sử
dụng bất
cứ thành viên public của đối tượng.

Mảng đa chiều

Từ đầu chương đến giờ chúng ta chỉ nói đến mảng các số nguyên hay mảng các đối
tượng. Tất cả các mảng này đều là mảng một chiều. Mảng một chiều trong đó các thành
phầ
n của nó chỉ đơn giản là các đối tượng kiểu giá trị hay đối tượng tham chiếu. Mảng có
thể được tổ chức phức tạp hơn trong đó mỗi thành phần là một mảng khác, việc tổ
chức này gọi là mảng đa chiều.
Mảng hai chiều được tổ chức thành các dòng và cột, trong đó các dòng là được tính theo
hàng ngang của mảng, và các cột được tính theo hàng dọc của mảng.
Mảng ba chiề
u cũng có thể được tạo ra nhưng thường ít sử dụng do khó hình dung.
Trong mảng ba chiều những dòng bây giờ là các mảng hai chiều.
Ngôn ngữ C# hỗ trợ hai kiểu mảng đa chiều là:
Mảng đa chiều cùng kích thước: trong mảng này mỗi dòng trong mảng có cùng
kích thước với nhau. Mảng này có thể là hai hay nhiều hơn hai chiều.
Mảng đa chiều không cùng kích thước: trong mảng này các dòng có thể không
cùng kích thước với nhau.

Mảng đa chiều cùng kích th
ước

Mảng đa chiều cùng kích thước còn gọi là mảng hình chữ nhật (rectanguler array).
Trong mảng hai chiều cổ điển, chiều đầu tiên được tính bằng số dòng của mảng và

chiều thứ hai được tính bằng số cột của mảng.
Để khai báo mảng hai chiều, chúng ta có thể sử dụng cú pháp theo sau:

<kiểu dữ liệu> [,] <tên mảng>
Ví dụ để khai báo một mảng hai chiều có tên là myRectangularArray để chứa hai dòng
và ba cộ
t các số nguyên, chúng ta có thể viết như sau:
int [ , ] myRectangularArray;


Ví dụ tiếp sau đây minh họa việc khai báo, tạo thể hiện, khởi tạo và in nội dung ra
màn hình của một mảng hai chiều. Trong ví dụ này, vòng lặp for được sử dụng để
khởi tạo các thành phần trong mảng.
Ví dụ 9.4: Mảng hai chiều.


namespace Programming_CSharp

{


using System;

public class Tester

{


static void Main()


{


// khai báo số dòng và số cột của mảng
const int rows = 4;
const int columns = 3;

// khai báo mảng 4x3 số nguyên

int [,] rectangularArray = new int[rows, columns];

// khởi tạo các thành phần trong mảng
for(int i = 0; i < rows; i++)
{


for(int j = 0; j < columns; j++)

{


rectangularArray[i,j] = i+j;

}

}


// xuất nội 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]);

}

}




}

}

}




Kết quả:
rectangularArray[0,0] = 0

rectangularArray[0,1] = 1
rectangularArray[0,2] = 2
rectangularArray[1,0] = 1
rectangularArray[1,1] = 2
rectangularArray[1,2] = 3
rectangularArray[2,0] = 2
rectangularArray[2,1] = 3
rectangularArray[2,2] = 4
rectangularArray[3,0] = 3
rectangularArray[3,1] = 4
rectangularArray[3,2] = 5


Trong ví dụ này, chúng ta khai báo hai giá trị:

const int rows = 4;

const int columns = 3;
hai giá trị này được sử dụng để khai báo số chiều của mảng:

int [,] rectangularArray = new int[rows, columns];
Lưu ý trong cú pháp này, dấu ngoặc vuông trong int[,] chỉ ra rằng đang khai báo một
kiểu dữ liệu là mảng số nguyên, và dấu phẩy (,) chỉ ra rằng đây là mảng hai chiều
(hai dấu phẩy khai báo mảng ba chiều, và nhiều hơn nữa). Việc tạo thể hiện thực sự
của m
ảng ở lệnh new int [rows,columns] để thiết lập kích thước của mỗi chiều. Ở
đây khai báo và tạo thể hiện được kết hợp với nhau.
Chương trình khởi tạo tất cả các giá trị các thành phần trong mảng thông qua hai
vòng lặp for. Lặp thông qua mỗi cột của mỗi dòng. Do đó, thành phần đầu tiên
được khởi tạo là rectangularArray[0,0], tiếp theo bởi rectangularArray[0,1] và đến

rectangularArray[0,2]. Một khi điều này thực hiện xong thì ch
ương trình sẽ chuyển
qua thực hiện tiếp ở dòng tiếp tục: rectangularArray[1,0], rectangularArray[1,1],
rectangularArray[1,2]. Cho đến khi tất cả các cột trong tất cả các dòng đã được duyệt
qua tức là tất cả các thành phần trong mảng đã được khởi tạo.
Như chúng ta đã biết, chúng ta có thể khởi tạo mảng một chiều bằng cách sử dụng
danh sách các giá trị bên trong dấu ngoặc ({}). Chúng ta cũng có thể làm tương tự
với mả
ng hai chiều. Trong ví dụ 9.5 khai báo mảng hai chiều rectangularArray, và
khởi tạo các thành phần của nó thông qua các danh sách các giá trị trong ngoặc, sau đó
in ra nội dung của nội dung.
Ví dụ 9.5: Khởi tạo mảng đa chiều.





namespace Programming_CSharp

{


using System;

public class Tester

{


static void Main()


{


// khai báo biến lưu số dòng số cột mảng
const int rows = 4;
const int columns = 3;

// khai báo và định nghĩa mảng 4x3

int[,] rectangularArray = {

{0,1,2}, {3,4,5}, {6,7,8},{9,10,11}

};

// xụất nội dung của mảng
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]);


}

}

}

}

}




Kết quả:
rectangularArray[0,0] = 0
rectangularArray[0,1] = 1
rectangularArray[0,2] = 2
rectangularArray[1,0] = 3
rectangularArray[1,1] = 4
rectangularArray[1,2] = 5
rectangularArray[2,0] = 6
r
e
c
t
a
n
g
u
l

a
rArray[2,1] = 7
rectangularArray[2,2] = 8
rectangularArray[3,0] = 9



rectangularArray[3,1] = 10

rectangularArray[3,2] = 11

Ví dụ trên cũng tương tự như ví dụ 9.4, nhưng trong ví dụ này chúng ta thực hiện việc
khởi tạo trực tiếp khi tạo các thể hiện:
int[,] rectangularArray =

{


{0,1,2}, {3,4,5}, {6,7,8},{9,10,11}

};


Giá trị được gán thông qua bốn danh sách trong ngoặc móc, mỗi trong số đó là có ba
thành phần, bao hàm một mảng 4x3.
Nếu chúng ta viết như sau:

int[,] rectangularArray =

{



{0,1,2,3}, {4,5,6,7}, {8,9,10,11}

};


thì sẽ tạo ra một mảng 3x4.

×