1. Trang chủ
  2. » Giáo Dục - Đào Tạo

Giáo trình phân tích cấu tạo bo mạch mảng một chiều các giá trị bên trong dấu ngoặc p4 ppsx

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

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

THÔNG TIN TÀI LIỆU

Thông tin cơ bản

Định dạng
Số trang 5
Dung lượng 902,82 KB

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

Nội dung

Khi chúng ta tạo một lớp có chứa một tập hợp và tạo một bộ chỉ mục, bộ chỉ mục... này có thể sử dụng kiểu chuỗi làm chỉ mục hay những kiểu dữ liệu khác ngoài kiểu số nguyên thường dùng..

Trang 1

Nếu một giá trị được nhập vào cho chỉ mục chưa có giá trị, chúng ta có thể cập nhật bộ đếm như sau:

set

{

if ( index >= strings.Length)

{

// chỉ mục vượt quá số tối đa của mảng

}

else

{

strings[index] = value;

if ( ctr < index+1)

ctr = index+1;

}

}

Điều này có thể cho phép chúng ta tạo một mảng phân mảng các giá trị, khi đó ta có thể gán cho đối tượng có chỉ mục thứ 10 mà không cần phải có phép gán với đối tượng trước có chỉ mục là 9 Điều này hoàn toàn thực hiện tốt vì ban đầu chúng ta đã cấp phát mảng 256 các phần tử Do đó chỉ cần truy cập đến đối tượng có chỉ mục từ 0 đến 255 là hợp lệ Khi đó ta có thể viết:

lbt[10] = “ah!”;

Kết quả thực hiện tương tự như sau:

lbt[0]: Hello

lbt[1]: Universe

lbt[2]: Who

lbt[3]: is

lbt[4]: Ngoc

lbt[5]: Mun

lbt[6]:

lbt[7]:

lbt[8]:

lbt[9]:

lbt[10]: “ah!”

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

Ngôn ngữ C# không đòi hỏi chúng ta phải sử dụng giá trị nguyên làm chỉ mục trong một tập hợp Khi chúng ta tạo một lớp có chứa một tập hợp và tạo một bộ chỉ mục, bộ chỉ mục

Trang 2

này có thể sử dụng kiểu chuỗi làm chỉ mục hay những kiểu dữ liệu khác ngoài kiểu số nguyên thường dùng

Trong trường hợp lớp ListBox trên, chúng ta muốn dùng giá trị chuỗi làm chỉ mục cho mảng

string Ví dụ 9.10 sau sử dụng chuỗi làm chỉ mục cho lớp ListBox Bộ chỉ mục gọi phương thức findString() để lấy một giá trị trả về là một số nguyên dựa trên chuỗi được cung cấp Lưu ý rằng ở đây bộ chỉ mục được nạp chồng và bộ chỉ mục từ ví dụ 9.9 trước vẫn còn tồn tại

Ví dụ 9.10: Nạp chồng chỉ mục.

-namespace Programming_CSharp

{

using System;

// tạo lớp List Box

public class ListBoxTest

{

// khởi tạo với những chuỗi

public ListBoxTest(params string[] initialStrings)

{

// cấp phát chuỗi

strings = new String[256];

// copy các chuỗi truyền vào

foreach( string s in initialStrings)

{

strings[ctr++] = s;

}

}

// thêm một chuỗi vào cuối danh sách

public void Add( string theString)

{

strings[ctr] = theString;

ctr++;

}

// bộ chỉ mục

public string this [ int index ]

{

get

{

if (index < 0 || index >= strings.Length)

Trang 3

{ // chỉ mục không hợp lệ }

return strings[index];

}

set

{

strings[index] = value;

}

}

private int findString( string searchString)

{

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

{

if ( strings[i].StartsWith(searchString)) {

return i;

} }

return -1;

}

// bộ chỉ mục dùng chuỗi

public string this [string index]

{

get

{

if (index.Length == 0) {

// xử lý khi chuỗi rỗng }

return this[findString(index)];

}

set

{

strings[findString(index)] = value;

}

}

// lấy số chuỗi trong mảng

Trang 4

public int GetNumEntries()

{

return ctr;

}

// biến thành viên lưu giữ mảng các chuỗi

private string[] strings;

// biến thành viên lưu giữa số chuỗi trong mảng

private int ctr = 0;

}

public class Tester

{

static void Main()

{

// tạo đối tượng List Box và sau đó khởi tạo

ListBoxTest lbt = new ListBoxTest(“Hello”,”World”);

// thêm các chuỗi vào

lbt.Add(“Who”);

lbt.Add(“is”);

lbt.Add(“Ngoc”);

lbt.Add(“Mun”);

// truy cập bộ chỉ mục

string str = “Universe”;

lbt[1] = str;

lbt[“Hell”] = “Hi”;

//lbt[“xyzt”] = “error!”;

// lấy tất cả các chuỗi ra

for(int i = 0; i < lbt.GetNumEntries();i++)

{

Console.WriteLine(“lbt[{0}] = {1}”, i, lbt[i]);

}

}

}

}

- Kết quả:

lbt[0]: Hi

lbt[1]: Universe

lbt[2]: Who

Trang 5

lbt[3]: is

lbt[4]: Ngoc

lbt[5]: Mun

-Ví dụ 9.10 thì tương tự như ví dụ 9.9 ngoại trừ việc thêm vào một chỉ mục được nạp chồng lấy tham số chỉ mục là chuỗi và phương thức findString() tạo ra để lấy chỉ mục nguyên từ chuỗi

Phương thức findString() đơn giản là lặp mảng strings cho đến khi nào tìm được chuỗi có ký

tự đầu tiên trùng với ký tự đầu tiên của chụổi tham số Nếu tìm thấy thì trả về chỉ mục của chuỗi, trường hợp ngược lại trả về -1

Như chúng ta thấy trong hàm Main(), lệnh truy cập chỉ mục thứ hai dùng chuỗi làm tham số chỉ mục, như đã làm với số nguyên trước:

lbt[“hell”] = “Hi”;

Khi đó nạp chồng chỉ mục sẽ được gọi, sau khi kiểm tra chuỗi hợp lệ tức là không rỗng, chuỗi này sẽ được truyền vào cho phương thức findString(), kết quả findString() trả về là một chỉ mục nguyên, số nguyên này sẽ được sử dụng làm chỉ mục:

return this[ findString(index)];

Ví dụ 9.10 trên tồn tại lỗi khi một chuỗi truyền vào không phù hợp với bất cứ chuỗi nào trong mảng, khi đó giá trị trả về là –1 Sau đó giá trị này được dùng làm chỉ mục vào chuỗi mảng

strings Điều này sẽ tạo ra một ngoại lệ (System.NullReferenceException) Trường hợp này xảy ra khi chúng ta bỏ đấu comment của lệnh:

lbt[“xyzt”] = ”error!”;

Các trường hợp phát sinh lỗi này cần phải được loại bỏ, đây có thể là bài tập cho chúng ta làm thêm và việc này hết sức cần thiết

Giao diện tập hợp

Môi trường NET cung cấp những giao diện chuẩn cho việc liệt kê, so sánh, và tạo các tập hợp Một số các giao diện trong số đó được liệt kê trong bảng 9.2 sau:

Giao diện Mục đích

IEnumerable Liệt kê thông qua một tập hợp bằng cách sử dụng

foreach

ICollection Thực thi bởi tất cả các tập hợp để cung cấp phương

thức CopyTo() cũng như các thuộc tính Count,

ISReadOnly, ISSynchronized, và SyncRoot

IComparer So sánh giữa hai đối tượng lưu giữ trong tập hợp để

sắp xếp các đối tượng trong tập hợp

IList Sử dụng bởi những tập hợp mảng được chỉ mục

Ngày đăng: 22/07/2014, 21:21

TỪ KHÓA LIÊN QUAN

TÀI LIỆU CÙNG NGƯỜI DÙNG

TÀI LIỆU LIÊN QUAN

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