0
0
Lập trình
Admin Team
Admin Teamtechmely

Hướng Dẫn Tối Ưu Tìm Kiếm Chuỗi Bằng SearchValues Trong .NET Core 8

Đăng vào 1 năm trước

• 3 phút đọc

Chủ đề:

Development

Tối Ưu Hóa Tìm Kiếm Chuỗi Với SearchValues Trong .NET Core 8

.NET Core 8 đã chính thức ra mắt SearchValues, một cấu trúc mới giúp cải thiện hiệu suất tìm kiếm chuỗi. Bài viết này sẽ hướng dẫn các bạn cách sử dụng SearchValues hiệu quả và so sánh nó với phương pháp IndexOf truyền thống.

Giới Thiệu Về SearchValues

Trong lập trình, việc xác định xem một chuỗi có chứa nhiều từ khóa hay không thường được thực hiện bằng những đoạn mã phức tạp. Dưới đây là một ví dụ về cách sử dụng IndexOf trong C# để kiểm tra sự tồn tại của hai từ "hello" và "world":

csharp Copy
public static class Extensions
{
    public static bool Search(this string line) =>
        line.IndexOf("hello", StringComparison.OrdinalIgnoreCase) > -1 && 
        line.IndexOf("world", StringComparison.OrdinalIgnoreCase) > -1;
}

Tuy nhiên, từ .NET Core 8, Microsoft đã giới thiệu lớp System.Buffers.SearchValues<T>. Sử dụng SearchValues không những giúp tăng hiệu suất tìm kiếm trên các chuỗi lớn mà còn làm cho mã lệnh trở nên gọn gàng và dễ đọc hơn, đặc biệt trong trường hợp cần tìm kiếm nhiều giá trị cùng lúc.

Mặc dù SearchValues mang lại nhiều lợi ích, nó không hoàn toàn thay thế phương pháp IndexOf hay IndexOfAny. Đối với các chuỗi nhỏ, bạn vẫn có thể sử dụng IndexOf mà không gặp trở ngại.

Ví Dụ 1: Kiểm Tra Từ Ngữ Bị Cấm Trong Văn Bản

Giả sử bạn có một tệp văn bản TextBanned.txt và một tệp bannedwords.json chứa danh sách các từ cần kiểm tra:

TextBanned.txt

Copy
Hello Karen, I am writing to inform you that your account is now active.
This is not a spam message. Please click the link below

bannedwords.json

json Copy
[
  {
    "Id": "1",
    "Name": "spam"
  },
  {
    "Id": "2",
    "Name": "advertisement"
  },
  {
    "Id": "3",
    "Name": "clickbait"
  }
]

Chúng ta sẽ tạo một lớp BannedWord để deserialize từ tệp bannedwords.json như sau:

csharp Copy
public class BannedWord
{
    public string Id { get; set; }
    public string Name { get; set; }
}

Tiếp theo, chúng ta sẽ xây dựng một phương thức mở rộng cho SearchValues:

csharp Copy
public static class GenericExtensions
{
    public static bool HasBannedWords(this string text, params string[] bannedWords) => 
        text.AsSpan().ContainsAny(SearchValues.Create(bannedWords, StringComparison.OrdinalIgnoreCase));
}

Phương thức này sẽ giúp xác định xem văn bản có chứa từ bị cấm hay không mà không phân biệt chữ hoa chữ thường. Bạn có thể thêm tùy chọn để kiểm tra phân biệt chữ hoa chữ thường nếu cần.

Ví Dụ 2: Tìm Kiếm Lỗi Và Cảnh Báo Trong Tệp Nhật Ký Visual Studio

Khi Visual Studio gặp lỗi, mọi thông tin đều được ghi vào tệp nhật ký. Để tìm kiếm lỗi hoặc cảnh báo, bạn có thể khởi động Visual Studio với tham số /log. Tệp ActivityLog.xml sẽ chứa rất nhiều dòng và việc tìm kiếm thủ công là rất tốn thời gian.

Dưới đây là ví dụ về cách sử dụng SearchValues để tìm kiếm lỗi trong tệp nhật ký:

csharp Copy
public static class Extensions
{
    public static bool Search(this string sender, string[] tokens) 
        => sender.AsSpan().ContainsAny(SearchValues.Create(tokens, StringComparison.OrdinalIgnoreCase));

    public static bool LineHasWarningOrError(this string line)
    {
        ReadOnlySpan<string> tokens = ["<type>Error</type>", "<type>Warning</type>"];
        return line.AsSpan().ContainsAny(SearchValues.Create(tokens, StringComparison.OrdinalIgnoreCase));
    }

    public static bool LineHasWarningOrErrorConventional(this string line) =>
        line.IndexOf("<type>Error</type>", StringComparison.OrdinalIgnoreCase) > -1 && 
        line.IndexOf("<type>Warning</type>", StringComparison.OrdinalIgnoreCase) > -1;
}

Khi thực hiện mã này, bạn sẽ có thể kiểm tra xem tệp nhật ký có chứa lỗi hoặc cảnh báo hay không chỉ trong vài giây, tiết kiệm quỹ thời gian quý giá cho các nhà phát triển.

Kết Luận

Việc áp dụng SearchValues trong .NET Core 8 không chỉ giúp định hình lại cách thức tìm kiếm trong lập trình mà còn mang lại trải nghiệm lập trình viên tốt hơn. Với SearchValues, bạn có thể tối ưu hóa các truy vấn tìm kiếm trong chuỗi một cách hiệu quả và dễ dàng hơn, nâng cao năng suất làm việc.
Chúng tôi hy vọng bài viết này đã giúp bạn hiểu rõ hơn về cách sử dụng SearchValues và những lợi ích mà nó mang lại cho dự án .NET của bạn.
source: viblo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào