有
List<byte> lbyte
有
byte[] searchBytes
如何在 lbyte 中不仅搜索单个字节而且搜索 searchBytes 的索引?
例如
Int32 index = lbyte.FirstIndexOf(searchBytes);
这是我想出的蛮力。
不是我要找的性能。
public static Int32 ListIndexOfArray(List<byte> lb, byte[] sbs)
{
if (sbs == null) return -1;
if (sbs.Length == 0) return -1;
if (sbs.Length > 8) return -1;
if (sbs.Length == 1) return lb.FirstOrDefault(x => x == sbs[0]);
Int32 sbsLen = sbs.Length;
Int32 sbsCurMatch = 0;
for (int i = 0; i < lb.Count; i++)
{
if (lb[i] == sbs[sbsCurMatch])
{
sbsCurMatch++;
if (sbsCurMatch == sbsLen)
{
//int index = lb.FindIndex(e => sbs.All(f => f.Equals(e))); // fails to find a match
IndexOfArray = i - sbsLen + 1;
return;
}
}
else
{
sbsCurMatch = 0;
}
}
return -1;
}
最佳答案
蛮力始终是一种选择。尽管与其他一些方法相比速度较慢,但在实践中通常还算不错。如果 lbyte
不是很大并且没有病理数据,它很容易实现并且完全可以接受。
这与brute force string searching 的概念相同.
关于c# - 在列表中搜索数组或列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16115112/