繁体   English   中英

从IEnumerable中删除子IEnumerable

[英]Remove sub IEnumerable from IEnumerable

我有一个IEnumerable<Byte> ,我想从中删除只能出现一次的字节序列。 第一个数组可以很大,但是第二个数组不能超过50bytes

什么是最好的方法(最快的方法)?

谢谢你的帮助 !

您可以为此创建静态方法,如下所示:

public static class Helper
{
    public static IEnumerable<byte> RemoveSubSequence(this IEnumerable<Byte> sequence, IEnumerable<Byte> subSequence)
    {
        List<byte> list = sequence.ToList();
        byte[] subSequenceList = subSequence.ToArray();

        int i = 0;
        int count = 0;

        for (; i < list.Count && count != subSequenceList.Length; i++)
            for (int i2 = 0; i2 < subSequenceList.Length && count != subSequenceList.Length; i2++)
                if (list[i + i2] == subSequenceList[i2]) count++; else count = 0;

        list.RemoveRange(i - 1, count);

        return list;
    }
}

然后您可以像这样使用它:

        IEnumerable<byte> bytes = new byte[] { 5, 7, 6, 9, 1, 5, 7, 6, 7, 0, 6, 4, 0, 6, 4, 8 };
        IEnumerable<byte> subSequence = new byte[] { 6, 7, 0, 6, 4, 0, 6, 4, 8 };

        bytes = bytes.RemoveSubSequence(subSequence);

        foreach (var item in bytes) Console.Write(item + "  ");

        Console.WriteLine("\n\n");

输出: 5, 7, 6, 9, 1, 5, 7,

IEnumerable是只读的,如果要删除它的某些居民,则应将其称为列表,而不是“ select ... bla.ToList()”。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM