День 1840. #ЧтоНовенького #CSharp13
Улучшения SearchValues в .NET 9
Продолжаем заглядывать в будущее .NET.
Класс System.Buffers.SearchValues<T>, представленный в .NET 8, предназначен для эффективного поиска набора байтов или символов в другом наборе, например, в реализации String.IndexOfAny(char[]). При создании экземпляра SearchValues<T> все данные, необходимые для оптимизации будущего поиска, вычисляются заранее и выбирается наиболее эффективный алгоритм поиска.
Вот простой пример:
var searchValues = SearchValues.Create(
new[] { 'a', 'e', 'i', 'o', 'u' });
Console.WriteLine(
ContainsVowel("Hello, World!")); // True
bool ContainsVowel(ReadOnlySpan<char> text)
=> text.ContainsAny(searchValues);
Пока мы ограничены поиском только символов. Но гораздо чаще мы хотим искать строковые значения, то есть текст, внутри другого текста. В .NET 9 обещают это ввести! Появились новые перегрузки, и SearchValues можно будет применять в поиске текста:
var names = SearchValues.Create(
["Steven", "Sherlock", "Holmes", "Michael", "Scott"],
StringComparison.OrdinalIgnoreCase);
var text = "This is Steven and Michael. You know Michael Scott from the office.";
Console.WriteLine(
MemoryExtensions.ContainsAny(text, names)); // True
Кроме того, есть предложение добавить SearchValues в регулярные выражения.
Источник: https://steven-giesel.com/blogPost/080c8f82-f376-489f-a304-72d419978294/searchvalues-object-become-better-with-net-9
>>Click here to continue<<