Mảng, Chỉ Mục, Tập Hợp phần cuối

9 360 0
Mảng, Chỉ Mục, Tập Hợp phần cuối

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

Thông tin tài liệu

Ví dụ 9.17 bắt đầu bằng việc tạo một bảng Hashtable mới, sử dụng các giá trị mặc định của dung lượng, phương thức tạo mã băm và phương tức so sánh. Tiếp sau là việc thêm 3 bộ giá trị vào theo thứ tự khóa/giá trị. Sau khi các item đã được thêm vào chúng ta có thể lấy giá trị thông qua khóa với cách thức dùng toán tử offset. Tập khóa và tập giá trị Các kiểu từ cung cấp thêm hai thuộc tính là thuộc tính Keys, và thuộc tính Values. Trong đó Keys truy cập đối tượng ICollection với tất cả những khóa trong Hashtable, và Values truy cập đối tượng ICollection với tất cả giá trị. Ví dụ 9.18 minh họa như sau. Ví dụ 9.18 Tập khóa và tập giá trị. ----------------------------------------------------------------------------- namespace Progrmming_CSharp { using System; using System.Collections; public class Tester { static void Main() { // tạo và khởi tạo hashtable Hashtable hashTable = new Hashtable(); hashTable.Add(“00440123”,”Ngoc Thao”); hashTable.Add(“00123001”,”My Tien”); hashTable.Add(“00330124”,”Thanh Tung”); // nhận tập khóa ICollection keys = hashTable.Keys; // nhập tập giá trị ICollection values = hashTable.Values; // xuất tập khóa foreach( string s in keys) { Console.WriteLine(“{0}”, s); } // xuất tập giá trị foreach( string s in values) { Console.WriteLine(“{0}”, s); } } } } ----------------------------------------------------------------------------- Kết quả: 00123001 00440123 00330124 My Tien Ngoc Thao Thanh Tung ----------------------------------------------------------------------------- Mặc dù thứ tự của keys không được đảm bảo theo thứ tự nhưng chúng đảm bảo rằng cùng với thứ tự đưa ra của giá trị. Như chúng ta thấy trên khóa 00123001 tương ứng với My Tien, . Giao diện IDictionaryEnumerator Những đối tượng IDictionary cũng hỗ trợ vòng lặp foreach bằng việc thực thi phương thức GetEnumerator(), phương thức này trả về một IDictionaryEnumerator. IDictionaryEnumerator được sử dụ ng để liệt kê bất cứ đối tượng IDictionary nào. Nó cung cấp thuộc tính để truy cập cả khóa và giá trị cho mỗi thành phần trong từ điển. Ta có ví dụ 9.19 minh họa như sau: Ví dụ 9.16: sử dụng giao diện IDictionaryEnumerator. ----------------------------------------------------------------------------- namespace Progrmming_CSharp { using System; using System.Collections; public class Tester { static void Main() { // tạo và khởi tạo hashtable Hashtable hashTable = new Hashtable(); hashTable.Add(“00440123”,”Ngoc Thao”); hashTable.Add(“00123001”,”My Tien”); hashTable.Add(“00330124”,”Thanh Tung”); Console.WriteLine(“hashTable”); Console.WriteLine(“Count: {0}”,hashTable.Count); Console.WriteLine(“Keys and Values:”); Print( hashTable ); } public static void Print(Hashtable table) { IDictionaryEnumerator enumerator = table.GetEnumerator(); while ( enumerator.MoveNext() ) { Console.WriteLine(“\t{0}:\t{1}”, enumerator.Key, enumerator.Value); } Console.WriteLine(); } } } ----------------------------------------------------------------------------- Kết quả: hashTableg Count: 3 Keys and Values: 00123001: My Tien 00440123: Ngoc Thao 00330124: Thanh Tung ----------------------------------------------------------------------------- Câu hỏi và trả lời Câuhỏi 1: Điều phân biệt giữa mảng và các thành phần bên trong một mảng? Trả lời 1 : Mảng là kiểu dữ liệu tham chiếu, còn các thành phần bên trong mảng được cấp phát dựa theo kiểu dữ liệu của chúng. Do vậy một mảng của kiểu dữ liệu tham chiếu sẽ không chứa giá trị gì cả mà chỉ tham chiếu đến những thành phần được tạo ra trên heap. Câuhỏi 2 : Một lớp có bộ chỉ mục khác một mảng như thế nào? Trả lời 2 : Hoàn toàn khác nhau, một mảng chỉ đơn thuần là một đối tượng tham chiếu đến những đối tượng khác cùng kiểu dữ liệu. Trong khi một lớp có bộ chỉ mục thì nó chứa một mảng các giá trị nào đó, và cho phép bên ngoài truy cập mảng này thông qua bộ chỉ mục. Một lớp như vậy không chỉ có một mảng đơn thuần mà còn có những thuộc tính khác, các phương thức .Nói chung là nếu ta chỉ cần thao tác đơn thuần trên từng phần riên lẻ của một mảng thì nên dùng mảng. Còn nếu chúng ta cần thực hiện một số chức năng nào đó có liên quan tới một mảng thì ta có thể xây dựng một lớp có chứa một mảng và hỗ trợ bộ chỉ mục. Câu hỏi 3 : Giao diện tập hợp là gì? Có phải .NET cung cấp một số giao diện chuẩn hay không? Trả l ời 3: Giao diện tập hợp cũng là một giao diện nhưng nó chỉ đưa ra các quy định thao tác trên tập hợp như: so sánh, liệt kê trên tập hợp, tạo các tập hợp . NET cung cấp một số giao diện cho tập hợp như: IEnumerable, ICollection, IComparer, IList Câu hỏi thêm Câuhỏi 1: Từ khoá params được sử dụng làm gì? Câuhỏi 2: Ý nghĩa của lệnh lặp foreach? Lệnh này được sử dụng với kiểu dữ liệu nào? Câuhỏi 3: Có mấy kiểu mảng đa chiều trong ngôn ngữ C#. Hãy cho biết từng loại và khi nào thì sử dụng từng loại cho thích hợp. Câuhỏi 4: Cách tạo ra mảng đa chiều không cùng kích thước? Câuhỏi 5: Hãy cho biết sự khác nhau giữa hai cách gọi Arr[i][j] và Arr[i, j]? Câu hỏi 6 : Có thể dùng lệnh foreach để xuất ra tất cả các thành phần của mảng đa chiều không cùng kích thước hay không? Nếu được thì phải làm như thế nào? Câuhỏi 7: Kiểu dữ liệu nào có thể làm chỉ mục trong bộ chỉ mục của một lớp? Câuhỏi 8: Làm thế nào để biết kích thước của một mảng? Câu hỏi 9 : Liệt kê những giao diện tập hợp mà .NET cung cấp? Cho biết ý nghĩa của từng giao diện? Câu hỏi 10: Có cách nào tạo một mảng mà không cần khai báo trước kích thước của mảng? Và trong quá trình thực hiện trên mảng chúng ta có thể tăng động kích thước của mảng hay không? Câu hỏi 11: Nếu mảng có 31 phần tử thì dung lượng của đối tượng ArrayList là bao nhiêu? Trường hợp có 33 phần tử? Câu hỏi 12 : Hàng đợi là gì? Chúng được sắp xếp theo kiểu thứ tự nào? Ứng dụng của hàng đợi ? Câu hỏi 13 : Ngăn xếp là gì? Chúng được sắp xếp theo kiểu thứ tự nào? Ứng dụng của ngăn xếp? Câuhỏi 14: Phương thức Peek() trong hàng đợi và ngăn xếp có ý nghĩa gì? Câu hỏi 15 : Kiểu dữ liệu nào cho phép truy cập một giá trị thông qua khóa của nó? Lớp nào trong .NET hỗ trợ kiểu dữ liệu này? Câuhỏi 16: Cách lấy tập giá trị trong một đối tượng Hashtable? Câuhỏi 17: Cách lấy tập khóa trong một đối tượng Hastable? Câuhỏi 18: Khóa có phải là duy nhất trong một Hastable hay không? Câu hỏi 19 : Nếu hai vùng có chung một khóa thì chúng được tìm kiếm theo kiểu nào? Và tốc độ tìm kiếm? Câuhỏi 20: Hashtable thực thi các giao diện tập hợp nào? Câuhỏi 21: Phương thức nào thực hiện việc tạo các khoá trong một Hashtable? Bài tập Bài tập 1 : Viết một chương trình tạo một mảng một chiều nguyên chứa giá trị ngẫu nhiên. Sắp xếp các thành phần trong mảng theo thứ tự tăng dần và hiển thị kết quả. Làm tương tự với trường hợp sắp xếp mảng theo thứ tự giảm dần. Bài tập 2 : Viết một chương trình tạo một mảng một chiều nguyên chứa giá trị ngẫu nhiên. Sắp xếp chúng theo thứ tự số âm thì tăng còn số dương thì giảm dần. Hiển thị kết quả ra màn hình. Bài tập 3 : Viết một chương trình tìm số lớn nhất và nhỏ nhất trong mảng hai chiều có kích thước cố định. Các thành phần của mảng được phát sinh ngẫu nhiên. Bài tập 4 : Viết chương trình cộng hai ma trận nxm, tức là mảng hai chiều có kích thước n dòng, m cột. Các giá trị của hai mảng phát sinh ngẫu nhiên, cho biết kết quả cộng hai ma trận? Bài tập 4 : Viết chương trình cho phép người dùng nhập vào một ma trận nxm, sao đó tìm kiếm một giá trị nào đó theo yêu cầu người dùng, kết quả của việc tìm kiếm là giá trị và thứ tự của giá trị tìm được trong ma trận. Bài tập5: Viết chương trình tạo một mảng hai chiều không cùng kích thước. Cố định số dòng của mảng là 5, còn từng dòng có kích thước bằng giá trị của dòng, tứ là dòng thứ nhất có kích thước 1 (tức là có 1 cột), dòng thứ hai có kích thước là 2 (tức là 2 cột) Các giá trị phát sinh ngẫu nhiên. Hãy xuất kết quả của ma trận theo kiểu sau: a[i][j] = <giá trị aij> . Việc xuất kết quả của ma trận trên có thể thực hiện bằ ng vòng lặp foreach được không? Nếu được thì hãy viết đoạn chương trình xuất ra kết quả? Bài tập 6: Viết chương trình tạo ra một mảng lưu trữ 30 điểm số của học sinh. Tính trung bình điểm của tất cả học sinh. Xuất kết quả từng điểm và điểm trung bình. Bài tập 7 : Viết một chương trình tạo ra một lớp tên là LopHoc, trong đó có khai báo bộ chỉ mục chỉ đến tên của từng học viên trong lớp. Cho phép một lớp có tối đa 30 học viên. Tạo chương trình minh họa cho phép người dùng nhập vào tên của từng học viên. Xuất kết quả danh sánh học viên của lớp thông qua bộ chỉ mục. Bài tập 8 : Viết chương trình sử dụng ArrayList để tạo một mảng. Chương trình tạo ra một vòng lặp cho phép người dùng nhập vào các giá trị cho mảng. Hãy xuất kết quả mảng cùng với giá trị Count, và Capacity của mảng. Ta có thể thiết lập giá trị Capacity nhỏ hơn giá trị Count được không? Bài tập9 : Viết chương trình tạo ra đối tượng Queue tên là myQueue. Khởi tạo myQueue có 5 giá trị ngẫu nhiên. Hãy thực hiện các bước sau, mỗi bước thực hiện phải xuất tình trạng của myQueue: 1. Lấy một giá trị ra. 2. Lấy tiếp một giá trị nữa. 3. Xem một giá trị ở đầu queue. 4. Đưa vào queue một giá trị. Bài tập 10 : Viết chương trình tạo đối tượng Stack tên là myStack. Khởi tạo myStack có 5 giá trị ngẫu nhiên. Hãy thực hiện các bước sau, mỗi bước thực hiện phải xuất tình trạng của myStack: 1. Lấy một giá trị ra. 2. Lấy tiếp một giá trị nữa. 3. Xem một giá trị ở đầu stack. 4. Đưa vào stack một giá trị. Bài tập 11 : Viết chương trình sử dụng kiểu dữ liệu từ điển để quản lý thông tin của một lớp học. Trong đó khóa là chuỗi mã số học viên còn giá trị là tên của học viên. Viết chương trình minh họa cho phép nhập vào 10 học viên, và cho phép người dùng tìm kiếm tên của học viên thông qua mã số học viên

Ngày đăng: 24/10/2013, 05:15

Từ khóa liên quan

Tài liệu cùng người dùng

  • Đang cập nhật ...

Tài liệu liên quan