Hướng dẫn入门: Collection trong C
Xin chào các bạn future programmers! Hôm nay, chúng ta sẽ bắt đầu một hành trình thú vị vào thế giới của collection trong C#. Đừng lo lắng nếu bạn mới bắt đầu học lập trình - tôi sẽ là người hướng dẫn thân thiện của bạn, giải thích mọi thứ từng bước. Hãy cùng nhau khám phá nhé!
什么是 Collections?
Hãy tưởng tượng bạn đang tổ chức một bữa tiệc và cần theo dõi tất cả các khách mời của mình. Bạn có thể viết tên mỗi người trên một mảnh giấy riêng, nhưng điều đó sẽ rất lộn xộn và không hiệu quả. Thay vào đó, bạn có thể sử dụng danh sách khách mời. Trong C#, collection giống như danh sách khách mời đó - nó giúp chúng ta tổ chức và quản lý các nhóm đối tượng liên quan.
Tại sao sử dụng Collections?
Collections rất hữu ích vì chúng cho phép chúng ta:
- Lưu trữ nhiều mục trong một biến duy nhất
- Dễ dàng thêm hoặc xóa mục
- Tìm kiếm và sắp xếp dữ liệu
- Thực hiện các thao tác trên nhóm dữ liệu
Bây giờ, hãy cùng nhìn vào một số loại collection phổ biến nhất trong C#.
Lists: Người bạn linh hoạt
Lists là gì?
List giống như một mảng động có thể mở rộng hoặc thu nhỏ theo nhu cầu. Nó rất phù hợp khi bạn không biết chính xác số lượng mục bạn cần lưu trữ.
Cách sử dụng List
Hãy tạo một danh sách các loại quả yêu thích của chúng ta:
List<string> fruits = new List<string>();
fruits.Add("Apple");
fruits.Add("Banana");
fruits.Add("Cherry");
Console.WriteLine($"We have {fruits.Count} fruits.");
Console.WriteLine($"The second fruit is {fruits[1]}.");
Trong ví dụ này, chúng ta:
- Tạo một List của các chuỗi
- Thêm ba loại quả vào danh sách
- In số lượng loại quả (sử dụng thuộc tính
Count
) - Truy cập loại quả thứ hai bằng chỉ số (nhớ rằng chỉ số bắt đầu từ 0!)
Kết quả:
We have 3 fruits.
The second fruit is Banana.
Dictionaries: Chìa khóa thành công
Dictionaries là gì?
Dictionaries giống như một từ điển thực tế - nó lưu trữ các cặp khóa-giá trị. Mỗi khóa phải duy nhất, tương tự như mỗi từ trong từ điển có định nghĩa riêng.
Sử dụng Dictionary
Hãy tạo một từ điển của màu sắc các loại quả:
Dictionary<string, string> fruitColors = new Dictionary<string, string>();
fruitColors.Add("Apple", "Red");
fruitColors.Add("Banana", "Yellow");
fruitColors.Add("Grape", "Purple");
Console.WriteLine($"An apple is {fruitColors["Apple"]}.");
if (fruitColors.ContainsKey("Cherry"))
{
Console.WriteLine($"A cherry is {fruitColors["Cherry"]}.");
}
else
{
Console.WriteLine("We don't know the color of a cherry.");
}
Ở đây, chúng ta:
- Tạo một Dictionary với các khóa và giá trị là chuỗi
- Thêm ba cặp quả-màu
- Truy cập màu sắc bằng khóa quả
- Kiểm tra xem khóa có tồn tại trước khi truy cập giá trị của nó
Kết quả:
An apple is Red.
We don't know the color of a cherry.
Queue: Đầu vào, đầu ra
Queue là gì?
Queue giống như một hàng đợi ở cửa hàng tạp hóa - người đầu tiên trong hàng đợi là người đầu tiên được phục vụ. Trong lập trình, nó là một cấu trúc dữ liệu "First-In-First-Out" (FIFO).
Queue trong hành động
Hãy mô phỏng một hàng đợi in đơn giản:
Queue<string> printQueue = new Queue<string>();
printQueue.Enqueue("Report.doc");
printQueue.Enqueue("Picture.jpg");
printQueue.Enqueue("Spreadsheet.xlsx");
Console.WriteLine($"Items in queue: {printQueue.Count}");
Console.WriteLine($"Printing: {printQueue.Dequeue()}");
Console.WriteLine($"Next in line: {printQueue.Peek()}");
Console.WriteLine($"Items remaining: {printQueue.Count}");
Trong ví dụ này, chúng ta:
- Tạo một Queue của các chuỗi
- Thêm (Enqueue) ba mục vào hàng đợi
- Xóa (Dequeue) mục đầu tiên
- Nhìn vào mục tiếp theo mà không xóa nó
Kết quả:
Items in queue: 3
Printing: Report.doc
Next in line: Picture.jpg
Items remaining: 2
Stack: Đầu vào, đầu ra ngược
Stack là gì?
Stack giống như một chồng đĩa - bạn thêm vào đỉnh và lấy ra từ đỉnh. Nó là một cấu trúc dữ liệu "Last-In-First-Out" (LIFO).
Đ chồng Stack
Hãy sử dụng Stack để theo dõi các thao tác Undo trong một trình soạn thảo văn bản:
Stack<string> undoStack = new Stack<string>();
undoStack.Push("Type 'Hello'");
undoStack.Push("Type ' World'");
undoStack.Push("Delete 'World'");
Console.WriteLine($"Undo operations: {undoStack.Count}");
Console.WriteLine($"Last action: {undoStack.Peek()}");
Console.WriteLine($"Undoing: {undoStack.Pop()}");
Console.WriteLine($"Remaining operations: {undoStack.Count}");
Ở đây, chúng ta:
- Tạo một Stack của các chuỗi
- Đẩy ba thao tác vào stack
- Nhìn vào mục đỉnh
- Bỏ ra (Pop) mục đỉnh
Kết quả:
Undo operations: 3
Last action: Delete 'World'
Undoing: Delete 'World'
Remaining operations: 2
Bảng phương thức Collection
Dưới đây là bảng các phương thức phổ biến cho các collection này:
Phương thức | List | Dictionary | Queue | Stack |
---|---|---|---|---|
Add | ✓ | ✓ | - | - |
Remove | ✓ | ✓ | - | - |
Clear | ✓ | ✓ | ✓ | ✓ |
Contains | ✓ | ✓ (ContainsKey) | ✓ | ✓ |
Count | ✓ | ✓ | ✓ | ✓ |
Enqueue | - | - | ✓ | - |
Dequeue | - | - | ✓ | - |
Push | - | - | - | ✓ |
Pop | - | - | - | ✓ |
Peek | - | - | ✓ | ✓ |
Kết luận
Chúc mừng! Bạn đã vừa bước những bước đầu tiên vào thế giới của collection trong C#. Nhớ rằng mỗi loại collection đều có những ưu thế riêng, và việc chọn đúng loại collection có thể làm cho mã của bạn hiệu quả hơn và dễ đọc hơn.
Khi bạn tiếp tục hành trình lập trình của mình, bạn sẽ khám phá ra nhiều cách sử dụng các collection này. Đừng ngại thử nghiệm - đó là cách chúng ta học hỏi và phát triển như những nhà phát triển.
Chúc bạn lập trình vui vẻ, và mong rằng các collection của bạn luôn được tổ chức tốt!
Credits: Image by storyset