在索引处测试 ReadOnlySpan<char> 是否有匹配的字符串

问题描述 投票:0回答:1

给定一个

ReadOnlySpan<char>
,我如何确认跨度中给定索引处存在字符串?我需要一个
bool
结果。

我想要一种简单的、最好是一行、零分配的方法。

由于边界检查,必须进行数学计算到跨度末尾的索引偏移量等,我的尝试很快就变得棘手。我的解决方案太冗长了。我想看看你能否彻底解决这个问题。尝试保留 lambda 语法。谢谢。

var span = "FooBarBazBizzBuzz".AsSpan();
Assert.IsTrue(Test(span,9,"Bizz".AsSpan()));

// As you can see, I am trying to use parameters that have no allocation

public bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) => //???;


c#
1个回答
0
投票

您可以获取从

index
开始的跨度切片,并测试
StartsWith

bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) =>
    span[index..].StartsWith(pattern)

这会单独比较

char
值。还有 另一个重载,它采用
StringComparison
作为第二个参数。

如果不想在

index
无效时返回 false,请添加检查:

bool Test(ReadOnlySpan<char> span, int index, ReadOnlySpan<char> pattern) =>
    index <= span.Length && index >= 0 && 
        span[index..].StartsWith(pattern);
© www.soinside.com 2019 - 2024. All rights reserved.