c# - 如何有效地找到 System.Numerics.Vector 中的值索引?
问题描述
我正在使用 .NET Framework 4.7.2 探索 System.Numerics.Vector(我正在处理的项目无法迁移到 .NET Core 3 并使用新的 Intrinsics 命名空间)。该项目正在处理非常大的 CSV/TSV 文件,我们花费大量时间遍历字符串以查找逗号、引号等,我正在努力加快进程。
到目前为止,我已经能够使用 Vector 来识别字符串是否包含给定字符(使用 EqualsAny 方法)。这很好,但我想更进一步。我想使用 Vector 有效地找到该字符的索引。我不知道怎么。下面是我用来确定字符串是否包含逗号的函数。
private static readonly char Comma = ',';
public static bool HasCommas(this string s)
{
if (s == null)
{
return false;
}
ReadOnlySpan<char> charSpan = s.AsSpan();
ReadOnlySpan<Vector<ushort>> charAsVectors = MemoryMarshal.Cast<char, Vector<ushort>>(charSpan);
foreach (Vector<ushort> v in charAsVectors)
{
bool foundCommas = Vector.EqualsAny(v, StringExtensions.Commas);
if (foundCommas)
{
return true;
}
}
int numberOfCharactersProcessedSoFar = charAsVectors.Length * Vector<ushort>.Count;
if (s.Length > numberOfCharactersProcessedSoFar)
{
for (int i = numberOfCharactersProcessedSoFar; i < s.Length; i++)
{
if (s[i] == ',')
{
return true;
}
}
}
return false;
}
我知道我可以使用上面的函数并扫描生成的向量,但这会破坏使用向量的目的。我听说新的 Intrinsics 库可以提供帮助,但我无法将我的项目升级到 .NET Core 3。
给定一个向量,你如何有效地找到一个字符的位置?有没有我不知道的聪明把戏?
解决方案
推荐阅读
- swift - Swift 短路与逻辑运算符未按预期工作
- php - 在 MySQL 中通过在 JSON 列上执行连接从两个表中获取数据时遇到问题
- android - ImageView 源始终覆盖其背景 Android
- python - Pandas:给定特定信号值的前进和后退行数
- scala - scala - 使用匿名函数从 gatling EL 表达式中解析的处理字符串
- python - 实例中的字典迭代不如预期
- python - Python:将索引的数据类型从对象更改为日期时间会删除时间(HH:MM:SS)
- android - Kotlin 从 Fragment 访问资产以设置字体
- javascript - 查找包含转义形式的分隔符的子字符串 (Regexp)
- wpf - WPF 在不同的窗口中使用相同的面板