Hướng dẫn về Bộ sưu tập C# có ví dụ
⚡ Tóm tắt thông minh
Trong C#, các tập hợp cung cấp một cách linh hoạt để lưu trữ và quản lý các nhóm đối tượng. Không giống như mảng, các tập hợp có thể mở rộng và thu hẹp trong thời gian chạy, và các không gian tên System.Collections và System.Collections.Generic cung cấp các kiểu dữ liệu có sẵn cho danh sách, từ điển, ngăn xếp và hàng đợi.

Trong hướng dẫn trước, chúng ta đã tìm hiểu về cách sử dụng mảng trong C#. Chúng ta hãy tìm hiểu tổng quan về nó, Mảng trong lập trình được sử dụng để nhóm một tập hợp các đối tượng có liên quan với nhau. Vì vậy, người ta có thể tạo một mảng hoặc một tập hợp các Số nguyên, có thể được truy cập thông qua một tên biến.
Bộ sưu tập trong C# là gì?
Bộ sưu tập tương tự như Mảng, nó cung cấp một cách làm việc linh hoạt hơn với một nhóm đối tượng.
Trong mảng, bạn có thể nhận thấy rằng bạn cần xác định trước số phần tử trong một mảng. Điều này phải được thực hiện khi mảng được khai báo.
Nhưng trong một bộ sưu tập, bạn không cần xác định trước kích thước của bộ sưu tập. Bạn có thể thêm phần tử hoặc thậm chí xóa phần tử khỏi bộ sưu tập bất kỳ lúc nào. Chương này sẽ tập trung vào cách chúng ta có thể làm việc với các bộ sưu tập khác nhau có sẵn trong C#.
Các lớp System.Collections
.NET Framework nhóm các lớp tập hợp không chung chung ban đầu vào trong không gian tên System.Collections. Bảng dưới đây tóm tắt các kiểu chính mà bạn có thể sử dụng ngay lập tức.
| Bộ sưu tập | Mô tả Chi tiết |
| Lập danh sách | Bộ sưu tập ArrayList tương tự như Arrays kiểu dữ liệu trong C#. Sự khác biệt lớn nhất là tính chất động của bộ sưu tập danh sách mảng. |
| Sắp xếp | Ngăn xếp là một tập hợp đặc biệt thể hiện khái niệm vào sau ra trước (LIFO). |
| hàng đợi | Hàng đợi là một tập hợp dữ liệu đặc biệt thể hiện khái niệm vào trước ra trước. |
| bảng băm | Bảng băm là một tập hợp đặc biệt được sử dụng để lưu trữ các cặp khóa-giá trị. |
| Danh sách được sắp xếp | SortedList là một bộ sưu tập lưu trữ các cặp khóa-giá trị theo thứ tự khóa tăng dần theo mặc định. |
| BitArray | Mảng bit là một mảng cấu trúc dữ liệu lưu trữ các bit. |
Các tập hợp chung trong C#
Các lớp không chung chung ở trên lưu trữ mọi phần tử dưới dạng đối tượng chung, điều này có nghĩa là trình biên dịch không thể kiểm tra kiểu và chương trình phải trả một chi phí nhỏ cho việc đóng gói giá trị. Để giải quyết vấn đề này, C# đã thêm không gian tên System.Collections.Generic, trong đó mỗi tập hợp được liên kết với một kiểu được khai báo.
Một tập hợp chung chung như List Chỉ chấp nhận chuỗi ký tự, do đó lỗi được phát hiện trong quá trình biên dịch và không cần ép kiểu khi đọc lại một phần tử. Điều này làm cho các tập hợp chung an toàn hơn, nhanh hơn và dễ đọc hơn, đó là lý do tại sao chúng là lựa chọn mặc định trong mã C# hiện đại.
Các bộ sưu tập chung phổ biến nhất được liệt kê dưới đây:
- Danh sách : Một danh sách có thể thay đổi kích thước, dựa trên chỉ mục, là sự thay thế chung cho ArrayList.
- Từ điển : Lưu trữ các cặp khóa-giá trị với khả năng tra cứu nhanh chóng dựa trên hàm băm.
- HashSet : Chỉ chứa các giá trị duy nhất và hỗ trợ các phép toán tập hợp như phép hợp.
- Hàng đợi : Một tập hợp dữ liệu vào trước ra trước, phiên bản chung của hàng đợi (Queue).
- Ngăn xếp : Một kiểu tập hợp vào sau ra trước, phiên bản chung của Stack.
- Danh sách đã sắp xếp : Sắp xếp các cặp khóa-giá trị theo khóa theo thứ tự tăng dần.
Ví dụ về tập hợp danh sách trong C#
List là kiểu dữ liệu tổng quát được sử dụng rộng rãi nhất vì nó hoạt động giống như một mảng động. Ví dụ dưới đây tạo một danh sách chuỗi, thêm và xóa các phần tử, đọc kích thước của danh sách, sau đó in ra các giá trị còn lại. Toàn bộ mã được viết trong tệp Program.cs.
Bước 1) Nhập không gian tên System.Collections.Generic và khai báo một List các chuỗi.
Bước 2) Thêm mục bằng phương thức Add và xóa mục bằng phương thức Remove.
Bước 3) Đọc thuộc tính Count, sau đó lặp qua danh sách bằng câu lệnh foreach.
using System; using System.Collections.Generic; namespace DemoApplication { class Program { static void Main(string[] args) { List<string> tutorials = new List<string>(); tutorials.Add("Java"); tutorials.Add("Python"); tutorials.Add("Kotlin"); tutorials.Remove("Python"); Console.WriteLine(tutorials.Count); foreach (string tutorial in tutorials) { Console.WriteLine(tutorial); } Console.ReadKey(); } } }
Code Giải trình:-
- Không gian tên System.Collections.Generic được nhập khẩu để kiểu dữ liệu List có sẵn cho chương trình.
- Một danh sách mới Một thư mục có tên là tutorials được tạo ra, và ba tên được thêm vào bằng phương thức Add.
- Phương thức Remove xóa giá trị “Python”, điều này để lại hai mục trong danh sách.
- Thuộc tính Count trả về số lượng mục, và vòng lặp foreach sẽ in ra từng giá trị còn lại theo thứ tự.
Khi chương trình chạy, trước tiên nó sẽ in ra số lượng của... 2, theo dõi bởi Java và Kotlin trên các dòng riêng biệt. Điều này cho thấy cách một tập hợp thay đổi kích thước của nó trong quá trình chạy, điều mà một mảng cố định không thể làm được.
Sự khác biệt giữa mảng và tập hợp trong C#
Cả hai một mảng và một tập hợp các mục liên quan được nhóm lại dưới một tên duy nhất, nhưng chúng lại hoạt động khác nhau khi chương trình đang chạy. Việc biết khi nào nên sử dụng từng loại sẽ giúp bạn viết mã sạch hơn và hiệu quả hơn.
Những điểm khác biệt chính được liệt kê dưới đây:
- Kích thước: Mảng có độ dài cố định được thiết lập khi khai báo, trong khi tập hợp có thể tăng hoặc giảm kích thước bất cứ lúc nào.
- Xử lý kiểu dữ liệu: Mảng lưu trữ một kiểu dữ liệu duy nhất, trong khi tập hợp có thể an toàn về kiểu dữ liệu với kiểu dữ liệu chung (generics) hoặc chứa các đối tượng có kiểu dữ liệu hỗn hợp khi không sử dụng kiểu dữ liệu chung.
- Vị trí: Mảng được tích hợp sẵn trong ngôn ngữ, trong khi các lớp tập hợp nằm trong không gian tên System.Collections và System.Collections.Generic.
- Các thao tác tích hợp sẵn: Các tập hợp cung cấp các phương thức sẵn có để thêm, xóa, tìm kiếm và sắp xếp các mục, trong khi mảng chỉ cung cấp khả năng truy cập theo chỉ mục cơ bản.
- Sử dụng tốt nhất: Hãy chọn mảng khi số lượng phần tử đã biết và cố định, và chọn tập hợp khi số lượng thay đổi trong quá trình chạy chương trình.
Tóm lại, mảng là lựa chọn tốt nhất cho dữ liệu có kích thước cố định, trong khi các tập hợp mang lại sự linh hoạt mà hầu hết các ứng dụng thực tế cần.
