我得到两个数组 byte[] a,和byte[] b,
我想判断a序列是否是b的一子序列,当然判断的时候必须把a看做一个整体,比方说
a={12,23,34,45},
b={23,45,12,23,34,45,54,12},
那么a就符合条件,如果
b={23,12,34,45,12}
那么a就不是b的子序列。有没有什么简单的方法来实现,或是用.net自由的类库来实现,
方法越简单越好,方法当然要有容错的能力。

解决方案 »

  1.   

    我想到的最简单的办法是都转成string,然后比较一下substring就可以了。
      

  2.   

    byte[] a = new byte[] {12,23,34,45};
    byte[] b = new byte[] {23,45,12,23,34,45,54,12};for(int i = 0; i < b.Length; i++)
    {
        if (b.Skip(i).Take(a.Length).SequenceEqual(a))
        {
            Console.WriteLine("OK: 从b第"+ i.ToString() +"项开始符合条件");
            break;
        }
    }
      

  3.   


    首行这个不可行,没有容错,例如:
                int[] arrayone = new int[] { 21, 13, 24 };
                int[] arraytwo = new int[] { 2, 113, 24, 50 };
    判断其a数组第一个无素,在b中出现的位置.
    开始进行循环比较
      

  4.   

    private void button2_Click(object sender, EventArgs e)
    {
        byte[] a ={ 23, 34, 45 };
        byte[] b={23,45,12,23,34,45,54,12};
        if (Encoding.ASCII.GetString(b).IndexOf(Encoding.ASCII.GetString(a)) >= 0)
        {
            MessageBox.Show("a就是b的子序列");
        }
        else
        {
            MessageBox.Show("a就不是b的子序列");
        }
    }
      

  5.   

    有,但不知道是不是最简单的:
    static void Main(string[] args)
            {
                int[] a = { 12, 23, 34, 45 };
                int[] b = { 23, 45, 12, 23, 34, 45, 54, 12 };            var result = b.Except(a);
                if (result.Count() > 0)
                {
                    Console.WriteLine("a是b的子集");
                }
                else
                {
                    Console.WriteLine("a不是b的子集");
                }            Console.ReadLine();
            }
      

  6.   

    更改一下条件,如果我得到的是一个string a = "11 DF 06 72 C2 B6 4F C5 8E 35 07 E1 87 7E 46 F9", 那是否是应该先把它转化成byte数组,再判断它是否是a的子序列。如果要转换,那如何转换,如果不需要转换,那该怎么做