1. Trang chủ
  2. » Công Nghệ Thông Tin

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

11 438 0
Tài liệu đã được kiểm tra trùng lặp

Đang tải... (xem toàn văn)

Tài liệu hạn chế xem trước, để xem đầy đủ mời bạn chọn Tải xuống

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Tiêu đề Mảng, Chỉ mục, và Tập hợp
Định dạng
Số trang 11
Dung lượng 217,38 KB

Các công cụ chuyển đổi và chỉnh sửa cho tài liệu này

Nội dung

MẢNG, CHỈ MỤC, VÀ TẬP HỢP · Mảng · Khai báo mảng · Giá trị mặc định · Truy cập các thành phần trong mảng · Khởi tạo thành phần trong mảng · Sử dụng từ khóa params · Câu lệnh lặp foreach

Trang 1

MẢNG, CHỈ MỤC, VÀ TẬP HỢP

· Mảng

· Khai báo mảng

· Giá trị mặc định

· Truy cập các thành phần trong mảng

· Khởi tạo thành phần trong mảng

· Sử dụng từ khóa params

· Câu lệnh lặp foreach

· Mảng đa chiều

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

· Mảng đa chiều kích thước khác nhau

· Chuyển đổi mảng

· System.Array

· Bộ chỉ mục

· Bộ chỉ mục và phép gán

· Sử dụng kiểu chỉ số khác

· Giao diện tập hợp

Danh sách mảng

Hàng đợi ( Queue)

Ngăn xếp ( Stack)

Kiểu từ điển

Hastables

Giao diện IDictionary

Tập khoá và tập giá trị

Giao diện IDictionaryEnumerator

· Câu hỏi & bài tập

Môi trường NET cung cấp rất đa dạng số lượng các lớp về tập hợp, bao gồm: Array, ArrayList, Queue, Stack, BitArray, NameValueCollection, và

StringCollection

Trang 2

Trong số đó tập hợp đơn giản nhất là Array, đây là kiểu dữ liệu tập hợp mà ngôn ngữ C# hỗ trợ xây dựng sẵn Chương này chúng ta sẽ tìm hiểu cách làm việc với mảng một chiều, mảng đa chiều, và mảng các mảng (jagged array) Chúng ta cũng được giới thiệu phần chỉ mục indexer, đây là cách thiết lập để làm cho việc truy cập những thuộc tính giống nhau trở nên đơn giản hơn, một lớp được chỉ mục thì giống như một mảng

.NET cũng cung cấp nhiều các giao diện, như IEnumerable và ICollection Những phần thực thi của các giao diện này cung cấp các tiêu chuẩn để tương tác với các tập hợp Trong chương này chúng ta sẽ được cách sử dụng hiệu quả của các giao diện Cũng thông qua chương này chúng ta sẽ được giới thiệu cách sử dụng chung của các tập hợp trong NET, bao gồm: ArrayList, Dictionary, Hashtable, Queue,

và Stack

Mảng

Mảng là một tập hợp có thứ tự của những đối tượng, tất cả các đối tượng này cùng một kiểu Mảng trong ngôn ngữ C# có một vài sự khác biệt so với mảng trong ngôn ngữ C++ và một số ngôn ngữ khác, bởi vì chúng là những đối tượng Điều này

sẽ cung cấp cho mảng sử dụng các phương thức và những thuộc tính

Ngôn ngữ C# cung cấp cú pháp chuẩn cho việc khai báo những đối tượng Array Tuy nhiên, cái thật sự được tạo ra là đối tượng của kiểu System.Array Mảng trong ngôn ngữ C# kết hợp cú pháp khai báo mảng theo kiểu ngôn ngữ C và kết hợp với định nghĩa lớp do đó thể hiện của mảng có thể truy cập những phương thức và thuộc tính của

System.Array

Một số các thuộc tính và phương thức của lớp System.Array

Thành viên Mô tả

BinarySearch() Phương thức tĩnh public tìm kiếm một mảng một chiều

đã sắp thứ tự

Clear() Phương thức tĩnh public thiết lập các thành phần của

mảng

về 0 hay null

Copy() Phương thức tĩnh public đã nạp chồng thực hiện sao

chép một vùng của mảng vào mảng khác

CreateInstance() Phương thức tĩnh public đã nạp chồng tạo một thể hiện

mới cho mảng IndexOf() Phương thức tĩnh public trả về chỉ mục của thể hiện đầu

tiên

Trang 3

chứa giá trị trong mảng một chiều

LastIndexOf() Phương thức tĩnh public trả về chỉ mục của thể hiện

cuối cùng của giá trị trong mảng một chiều Reverse() Phương thức tĩnh public đảo thứ tự của các thành phần

trong mảng một chiều Sort() Phương thức tĩnh public sắp xếp giá trị trong mảng

một chiều

IsFixedSize Thuộc tính public giá trị bool thể hiện mảng có kích

thước

cố định hay không

IsReadOnly Thuộc tính public giá trị bool thể hiện mảng chỉ đọc

hay không

Trang 4

IsSynchronized Thuộc tính public giá trị bool thể hiện mảng có hỗ

trợ thread-safe Length Thuộc tính public chiều dài của mảng

Rank Thuộc tính public chứa số chiều của mảng

SyncRoot Thuộc tính public chứa đối tượng dùng để đồng bộ truy

cập trong mảng GetEnumerator() Phương thức public trả về IEnumerator

GetLength() Phương thức public trả về kích thước của một chiều cố

định trong mảng GetLowerBound() Phương thức public trả về cận dưới của chiều xác định

trong mảng GetUpperBound() Phương thức public trả về cận trên của chiều xác định

trong mảng Initialize() Khởi tạo tất cả giá trị trong mảng kiểu giá trị bằng cách

gọi

bộ khởi dụng mặc định của từng giá trị

SetValue() Phương thức public thiết lập giá trị cho một thành phần

xác định trong mảng

Bảng 9.1: Các phương thức và thuộc tính của System.Array

Khai báo mảng

Chúng ta có thể khai báo một mảng trong C# với cú pháp theo sau:

<kiểu dữ liệu>[] <tên mảng>

Ví dụ ta có khai báo như sau:

int[] myIntArray;

Cặp dấu ngoặc vuông ([]) báo cho trình biên dịch biết rằng chúng ta đang khai báo một mảng Kiểu dữ liệu là kiểu của các thành phần chứa bên trong mảng Trong ví dụ bên trên myIntArray được khai báo là mảng số nguyên

Chúng ta tạo thể hiện của mảng bằng cách sử dụng từ khóa new như sau:

myIntArray = new int[6];

Khai báo này sẽ thiết lập bên trong bộ nhớ một mảng chứa sáu số nguyên

Ghi chú: dành cho lập trình viên Visual Basic, thành phần đầu tiên luôn bắt đầu 0,

không

có cách nào thiết lập cận trên và cận dưới của mảng, và chúng ta cũng không thể thiết lập lại kích thước của mảng

Điều quan trọng để phân biệt giữa bản thân mảng (tập hợp các thành phần) và các

Trang 5

thành phần trong mảng Đối tượng myIntArray là một mảng, thành phần là năm số nguyên được lưu giữ Mảng trong ngôn ngữ C# là kiểu dữ liệu tham chiếu, được tạo ra trên heap Do đó myIntArray được cấp trên heap Những thành phần của mảng được cấp phát dựa trên các kiểu dữ liệu của chúng Số nguyên là kiểu

dữ liệu giá trị, và do đó những thành phần của

myIntArray là kiểu dữ liệu giá trị, không phải số nguyên được boxing Một mảng của kiểu dữ liệu tham chiếu sẽ không chứa gì cả nhưng tham chiếu đến những thành phần được tạo ra trên heap

Giá trị mặc định

Khi chúng ta tạo một mảng có kiểu dữ liệu giá trị, mỗi thành phần sẽ chứa giá trị mặc định của kiểu dữ liệu (xem bảng 4.2, kiểu dữ liệu và các giá trị mặc định) Với khai báo: myIntArray = new int[5];

sẽ tạo ra một mảng năm số nguyên, và mỗi thành phần được thiết lập giá trị mặc định

là 0, đây cũng là giá trị mặc định của số nguyên

Không giống với mảng kiểu dữ liệu giá trị, những kiểu tham chiếu trong một mảng không được khởi tạo giá trị mặc định Thay vào đó, chúng sẽ được khởi tạo giá trị null Nếu chúng ta cố truy cập đến một thành phần trong mảng kiểu dữ liệu tham chiếu trước khi chúng được khởi tạo giá trị xác định, chúng ta sẽ tạo ra một ngoại lệ

Giả sử chúng ta tạo ra một lớp Button Chúng ta khai báo một mảng các đối tượng Button với cú pháp sau:

Button[] myButtonArray;

và chúng ta tạo thể hiện của mảng như sau:

myButtonArray = new Button[3];

Ghi chú: chúng ta có thể viết ngắn gọn như sau:

Button muButtonArray = new Button[3];

Không giống với ví dụ mảng số nguyên trước, câu lệnh này không tao ra một mảng với những tham chiếu đến ba đối tượng Button Thay vào đó việc này sẽ tạo ra một mảng myButtonArray với ba tham chiếu null Để sử dụng mảng này, đầu tiên chúng ta phải tạo và gán đối tượng Button cho từng thành phần tham chiếu trong mảng Chúng ta có thể tạo đối tượng trong vòng lặp và sau đó gán từng đối tượng vào trong mảng

Truy cập các thành phần trong mảng

Để truy cập vào thành phần trong mảng ta có thể sử dụng toán tử chỉ mục ([]) Mảng dùng

cơ sở 0, do đó chỉ mục của thành phần đầu tiên trong mảng luôn luôn là 0 Như ví dụ trước thành phần đầu tiên là myArray[0]

Như đã trình bày ở phần trước, mảng là đối tượng, và do đó nó có những thuộc tính Một trong những thuộc tính hay sử dụng là Length, thuộc tính này sẽ báo cho

Trang 6

biết số đối tượng trong một mảng Một mảng có thể được đánh chỉ mục từ 0 đến Length –1 Do đó nếu có năm thành phần trong mảng thì các chỉ mục là: 0, 1, 2, 3, 4

Ví dụ 9.1 minh họa việc sử dụng các khái niệm về mảng từ đầu chương tới giờ Trong

ví dụ một lớp tên là Tester tạo ra một mảng kiểu Employee và một mảng số nguyên Tạo các đối tượng Employee sau đó in hai mảng ra màn hình

Ví dụ 9.1: làm việc với một mảng

-

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++)

Trang 7

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

}

// xuất mảng nguyên

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

{

Console.Write(intArray[i].ToString()+”\t”

);

Trang 8

}

// xuất mảng Employee

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

{

Console.WriteLine(empArray[i].ToString()+”\t”);

}

}

}

}

-

Kết quả:

0 0 0 0 0 5 6 7

-

Ví dụ bắt đầu với việc định nghĩa một lớp Employee, lớp này thực thi một bộ khởi dựng lấy một tham số nguyên Phương thức ToString() được kế thừa từ lớp Object được phủ quyết để in ra giá trị empID của đối tượng Employee

Các kiểu tạo ra là khai báo rồi mới tạo thể hiện của hai mảng Mảng số nguyên được

tự động thiết lập giá trị 0 mặc định cho từng số nguyên trong mảng Nội dung của mảng Employee được tạo bằng các lệnh trong vòng lặp

Cuối cùng, nội dung của cả hai mảng được xuất ra màn hình console để đảm bảo kết quả như mong muốn; năm giá trị đầu của mảng nguyên, ba số sau cùng là của mảng

Employee

Khởi tạo thành phần của mảng

Chúng ta có thể khởi tạo nội dung của một mảng ngay lúc tạo thể hiện của mảng bằng cách đặt những giá trị bên trong dấu ngoặc ({}) C# cung cấp hai cú pháp để khởi tạo các thành phần của mảng, một cú pháp dài và một cú pháp ngắn:

int[] myIntArray = new int[5] { 2, 4, 6, 8, 10};

int[] myIntArray = { 2, 4, 6, 8, 10};

Không có sự khác biệt giữa hai cú pháp trên, và hầu hết các chương trình đều sử dụng cú pháp ngắn hơn do sự tự nhiên và lười đánh nhiều lệnh của người lập trình

Sử dụng từ khóa params

Chúng ta có thể tạo một phương thức rồi sau đó hiển thị các số nguyên ra màn hình console bằng cách truyền vào một mảng các số nguyên và sử dụng

vòng lặp foreach để duyệt qua từng thành phần trong mảng Từ khóa params cho

phép chúng ta truyền một số biến của tham số mà không cần thiết phải tạo một mảng Trong ví dụ kế tiếp, chúng ta sẽ tạo một phương thức tên DisplayVals(), phương thức

Trang 9

này sẽ lấy một số các biến của tham số nguyên: public void DisplayVals( params int[] intVals)

Trang 10

Phương thức có thể xem mảng này như thể một mảng được tạo ra tường minh và được truyền vào tham số Sau đó chúng ta có thể tự do lặp lần lượt qua các thành phần trong mảng giống như thực hiện với bất cứ mảng nguyên nào khác:

foreach (int i in intVals)

{

Console.WriteLine(“DisplayVals: {0}”, i);

}

Tuy nhiên, phương thức gọi không cần thiết phải tạo tường minh một mảng, nó chỉ đơn giản truyền vào các số nguyên, và trình biên dịch sẽ kết hợp những tham số này vào trong một mảng cho phương thức DisplayVals, ta có thể gọi phương thức như sau:

t.DisplayVals(5,6,7,8);

và chúng ta có thể tự do tạo một mảng để truyền vào phương thức nếu

muốn: int [] explicitArray = new int[5] {1,2,3,4,5};

t.DisplayArray(explicitArray);

Ví dụ 9.3 cung cấp tất cả mã nguồn để minh họa sử dụng cú pháp params

Ví dụ 9.3: minh họa sử dụng params

-

namespace Programming_CSharp

{

using System;

public class Tester

{

static void Main()

{

Tester t = new Tester();

t.DisplayVals(5,6,7,8);

int[] explicitArray = new int[5] {1,2,3,4,5};

t.DisplayVals(explicitArray);

}

public void DisplayVals( params int[] intVals)

{

foreach (int i in intVals)

{

Console.WriteLine(“DisplayVals {0}”, i);

}

}

}

}

Trang 11

-

Kết quả:

DisplayVals 5

DisplayVals 6

DisplayVals 7

DisplayVals 8

DisplayVals 1

DisplayVals 2

DisplayVals 3

DisplayVals 4

DisplayVals 5

-

Ngày đăng: 26/01/2014, 03:20

HÌNH ẢNH LIÊN QUAN

Bảng 9.1: Các phương thức và thuộc tính của System.Array. - Tài liệu Mảng, Chỉ Mục, Tập Hợp phần 1 pptx
Bảng 9.1 Các phương thức và thuộc tính của System.Array (Trang 4)

TỪ KHÓA LIÊN QUAN

🧩 Sản phẩm bạn có thể quan tâm

w