namespace GFramework.Core.Extensions;
///
/// Span 和 ReadOnlySpan 扩展方法,提供零分配的高性能操作
///
public static class SpanExtensions
{
///
/// 尝试将字符 span 解析为指定类型
///
/// 目标类型,必须实现 ISpanParsable 接口
/// 要解析的字符 span
/// 解析结果,失败时为 default(T)
/// 如果解析成功返回 true,否则返回 false
///
///
/// ReadOnlySpan<char> span = "123";
/// if (span.TryParseValue<int>(out var result))
/// {
/// Console.WriteLine(result); // 123
/// }
///
///
public static bool TryParseValue(this ReadOnlySpan span, out T? result) where T : ISpanParsable
{
return T.TryParse(span, null, out result);
}
///
/// 计算 span 中指定值出现的次数
///
/// 元素类型,必须实现 IEquatable 接口
/// 要搜索的 span
/// 要计数的值
/// 值出现的次数
///
///
/// ReadOnlySpan<int> span = stackalloc int[] { 1, 2, 3, 2, 1 };
/// var count = span.CountOccurrences(2); // 2
///
///
public static int CountOccurrences(this ReadOnlySpan span, T value) where T : IEquatable
{
var count = 0;
foreach (var item in span)
{
if (item.Equals(value))
count++;
}
return count;
}
}