Bài tập C#

Lọc thẻ không trùng lặp với HashSet trong C#

Trong bài học này, bạn sẽ dùng HashSet để giữ lại các thẻ không trùng lặp, bỏ qua sự khác biệt giữa chữ hoa và chữ thường.

Giới thiệu

HashSet<T> là collection chỉ lưu mỗi giá trị một lần, nên rất phù hợp khi bạn cần tính duy nhất, ví dụ danh sách thẻ (tag) của một bài viết. HashSet cũng kiểm tra rất nhanh một giá trị đã có trong tập hợp hay chưa.

HashSet được tạo với bộ so sánh StringComparer.OrdinalIgnoreCase, nên "C#" và "c#" được coi là cùng một thẻ. Khi khởi tạo với ba giá trị, thẻ trùng bị bỏ qua và tập hợp chỉ còn 2 phần tử. Nếu không có bộ so sánh này, hai cách viết khác nhau sẽ trở thành hai thẻ riêng biệt.

Xem cách hoạt động

Chọn một phép toán để tô sáng kết quả trên sơ đồ. Thêm một giá trị đã có trong set để thấy phần tử trùng bị bỏ qua.

Ví dụ C# chạy được

C#
Chạy code →
Program.cs
using System;
using System.Collections.Generic;
class Program
{
    static void Main()
    {
        var tags = new HashSet<string>(StringComparer.OrdinalIgnoreCase) { "C#", "dotnet", "c#" };
        Console.WriteLine(tags.Count);
    }
}
Kết quả khi chạy
2

Luyện tập với trình gỡ lỗi

Đặt breakpoint ở một phép gán hoặc điều kiện quan trọng, bấm Debug và xem giá trị các biến cục bộ (local variable) trước khi bước sang dòng tiếp theo.

Luyện tập với thử thách

Áp dụng kiến thức của bài học này để giải một bài toán thực tế. Mỗi thử thách chạy ngay trên trình duyệt, có kiểm thử tức thì và AI nhận xét.

Tất cả thử thách