SearchValues在 .NET 8 和 .NET 9 中的使用

作者:微信公众号:【架构师老卢】
8-3 17:47
36

概述:.NET 不断发展,带来了可提高性能和易用性的工具。.NET 8 中引入的一个此类增强功能是类型,旨在有效地搜索集合中的特定值。虽然功能强大,但它的初始实现有局限性,特别是在处理字符串等复杂数据类型时。SearchValuesT但是,.NET 9 解决了这些限制,使其更加通用,在更广泛的上下文中适用。SearchValues本文将探讨它是如何演变的,以及如何在应用程序中利用它。SearchValuesSearchValuesT在 .NET 8 中SearchValuesT是 .NET 8 中引入的一种类型,用于优化集合内的搜索。与传统的方法(如 或 )相比,它允许更有效的查找,尤其是在处理像

.NET 不断发展,带来了可提高性能和易用性的工具。

.NET 8 中引入的一个此类增强功能是类型,旨在有效地搜索集合中的特定值。虽然功能强大,但它的初始实现有局限性,特别是在处理字符串等复杂数据类型时。

但是,.NET 9 解决了这些限制,使其更加通用,在更广泛的上下文中适用。

本文将探讨它是如何演变的,以及如何在应用程序中利用它。

SearchValues<T>在 .NET 8 中

SearchValues<T>是 .NET 8 中引入的一种类型,用于优化集合内的搜索。与传统的方法(如 或 )相比,它允许更有效的查找,尤其是在处理像 或这样的原始类型时。

.NET 8 中的基本用法

让我们从一个简单的例子开始,其中用于搜索字符串中的元音:

using System;
using System.Collections.Generic;

class Program
{
    static void Main()
    {
        SearchValues<char> vowelSearch = SearchValues.Create(new[] { 'a', 'e', 'i', 'o', 'u' });
        
        Console.WriteLine(ContainsVowel("Welcome to .NET 8!")); // Returns true
    }

    static bool ContainsVowel(ReadOnlySpan<char> text) => text.ContainsAny(vowelSearch);
}

在此示例中,用于创建一组元音。然后,该方法检查给定文本中是否存在这些元音中的任何一个。性能改进来自提供的底层优化,包括矢量化操作。

.NET 9 中的新增功能

虽然 .NET 8 中的功能令人印象深刻,但它们在某种程度上仅限于简单的数据类型,例如 .但是,如果您想在更大的文本中搜索整个单词或短语怎么办?这是 .NET 9 引入重大升级的地方。

.NET 9 中的新功能

.NET 9 扩展为支持字符串,使你能够有效地在文本中搜索多个子字符串。对于需要执行大量文本处理(例如解析日志、过滤用户输入或分析文档)的应用程序来说,这是一个游戏规则的改变者。

以下是使用增强功能的方法:

using System;

class Program
{
    static void Main()
    {
        var nameSearch = SearchValues.Create(new[] { "Alice", "Bob", "Charlie", "Diana" }, StringComparison.OrdinalIgnoreCase);

        string text = "Alice and Bob are going to the park. Diana is already there.";

        Console.WriteLine(ContainsAnyName(text, nameSearch)); // Returns true
    }

    static bool ContainsAnyName(ReadOnlySpan<char> text, SearchValues<string> names) =>
        text.ContainsAny(names);
}

它是如何工作的

在上面的示例中,创建了一个要在给定文本中搜索的名称列表。然后,该方法检查文本中是否出现这些名称中的任何一个。这里的关键增强功能是处理字符串的能力,以及通过参数进行不区分大小写的搜索的支持。

性能注意事项

在 .NET 9 中引入不仅要添加新功能,还要保持性能。即使在处理字符串时,也可以利用 SIMD(单指令、多数据)和其他优化来确保尽可能高效地执行搜索。

实际应用

to handle 字符串的扩展开启了各种实际用例:

日志分析:快速识别大型日志文件中是否存在任何已知的错误代码或模式。

数据过滤:有效过滤用户生成的内容中的违禁字词或短语。

文本解析:解析文档或文件以提取关键信息或检测特定关键字。

以下示例说明了如何在实际场景中使用它,例如从用户输入中筛选出某些关键字:

using System;

class Program
{
    static void Main()
    {
        var bannedWords = SearchValues.Create(new[] { "spam", "advertisement", "clickbait" }, StringComparison.OrdinalIgnoreCase);

        string userInput = "This is not a spam message. Please click the link below.";

        if (ContainsBannedWords(userInput, bannedWords))
        {
            Console.WriteLine("User input contains banned words.");
        }
        else
        {
            Console.WriteLine("User input is clean.");
        }
    }

    static bool ContainsBannedWords(ReadOnlySpan<char> text, SearchValues<string> bannedWords) =>
        text.ContainsAny(bannedWords);
}

凭借在 .NET 9 中处理字符串的能力,我们开发人员现在可以在更广泛的应用程序中利用,使文本处理更快、更高效。

阅读排行