c# - 如何确定一个数组是另一个数组的一部分?

标签 c# .net arrays

例如:我有数组

var src = new byte[] {1, 2, 3, 4, 5};
var tag = new byte[] {3, 4};

谁知道快速查找标签数组索引的方法? 我需要如下内容:

int FindIndexOfSeq(byte[] src, byte[] sequence);

一个序列在src中可以出现多次

解决方案:How to find index of sublist in list?

最佳答案

你能得到的最好的是 O(m),但我的实现有点复杂。如果您对最坏情况为 O(m*n) 的解决方案感到满意,您可以使用下面的解决方案。如果您的序列是有序的,并且 tag 数组中的起始项仅在 src 中出现一次,这也会导致 O(m)。

class Program
{
    static void Main(string[] args)
    {
        var src = new byte[] { 1, 2, 3, 4, 5 };
        var tag = new byte[] { 3, 4 };
        var index = FindIndexOfSeq(src, tag);
        Console.WriteLine(index);
        Console.ReadLine();
    }
    static int FindIndexOfSeq<T>(T[] src, T[] seq)
    {
        int index = -1;
        for (int i = 0; i < src.Length - seq.Length + 1; i++)
        {
            bool foundSeq = true;
            for (int j = 0; j < seq.Length; j++)
            {
                foundSeq = foundSeq && src[i + j].Equals(seq[j]);
            }
            if (foundSeq)
            {
                index = i;
                break;
            }
        }
        return index;
    }
}

我假设序列必须按照那个顺序,我只在 firefox 中编译它,所以不确定它是否有效 :)。此外,我将其设为通用的,因此它可以处理任何类型的数组,而不仅仅是字节。

更新:更新后的代码可以编译并工作...或者我的简单测试工作。

关于c# - 如何确定一个数组是另一个数组的一部分?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4658305/

相关文章:

c# - 我在 ASP.NET Core Web API 应用程序上配置 CORS 时遇到 CORS 错误

c# - 如何使读取此实例原始线程安全而无需锁定?

ios - 如何在 Swift 中为 Int 数组(自定义字符串结构)实现 Hashable 协议(protocol)

java - 将二维数组作为一个整体进行排序

.net - Stackexchange.Redis 的 fire and forget 是否保证交付?

arrays - 如何在ajax中使用foreach codeigniter

c# - Automapper & Autofac typeconverter - 没有默认构造函数

c# - AzureADB2CDefaults 已过时,如何替换它?

c# - Apache Mahout .net 模拟的机器学习库

c# - 这是在 .Net 中维护国际化资源的好方法