c# - 在列表中搜索数组或列表

标签 c# .net linq list

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/

相关文章:

linq - 请帮助理解 LINQ、C# 中的字典

c# - 为什么我不能在 C#、Visual Studio 2010 中使用 Tuple?

.net - WCF 连接被错误中止/现有连接被远程主机强制关闭

c# - 带有 Type 变量的 Cast<T>()

c# - 在xamarin.Android REST服务中获取方法

c# - 如何在 C# .NET 中计算 CPU 平均负载

c# - 加速 40,000 行的 linq 查询

c# - 单元测试 - 如何比较两个分页集合以断言所有项目不同?

c# - 如何在 C# 中创建带引号的字符串

c# - DataGridView 缺少数据源为空的新行